Multithreading 为什么即使您拥有互斥锁,互斥锁try\u lock返回false?

Multithreading 为什么即使您拥有互斥锁,互斥锁try\u lock返回false?,multithreading,boost-mutex,Multithreading,Boost Mutex,考虑以下简单代码: boost::mutex m; m.lock(); bool locked = m.try_lock(); std::cout<< (!locked? "Can't use lock" : "Can use lock.")<<std::endl; system("pause"); boost::mutexm; m、 锁(); bool lock=m。请尝试锁定(); std::cout您的代码设计糟糕。任何使用递归互斥的尝试都表明存在设计缺陷。在代码

考虑以下简单代码:

boost::mutex m;
m.lock();
bool locked = m.try_lock();
std::cout<< (!locked? "Can't use lock" : "Can use lock.")<<std::endl;
system("pause");
boost::mutexm;
m、 锁();
bool lock=m。请尝试锁定();

std::cout您的代码设计糟糕。任何使用递归互斥的尝试都表明存在设计缺陷。在代码中,您需要保护所需的资源,线程当前是否拥有资源对您来说并不重要。

问题在于必须通过异步例程保护资源。也就是说,它不可能在一个函数中发生。糟糕的设计。这是一种非常快速的死锁方法。资源上的每个锁都应该有一个可预测的生命周期。您好,我只是来告诉您您是对的,设计很糟糕。但是,你的回答应该是评论,而不是回答。@TomášZato,我很感谢你告诉我这一点,我希望你的新设计很适合你。我也相信这确实是一个答案,因为我希望它能把你们的想法带向正确的方向。你知道,当有人问如何砍掉他的头时,你可以用正确的技巧回答,或者试着说服他做其他事情。我相信后者的价值。我会做前者——并给予适当的警告——即使情况与你描述的完全一样。因为恰恰相反,我认为问题应该得到回答,而不是绕过。我的观点被许多人的回答所强化,他们非常确信他们应该回答其他被问到的问题,他们不认为谷歌的其他人会有理由去做OP要求的事情,即使OP不应该这样做。