在我的应用程序 (C++/Linux) 中,有时线程在被取消时会获取互斥锁(递归)。这会导致死锁,因为其他线程也使用相同的互斥锁但无法获取它。
现在可以检查该线程是否正在锁定任何互斥锁。我的动机是手动清除线程正在锁定然后取消线程。
我能想到的一种可能的方法是维护一个计数器。也欢迎任何更好的方法..
提前致谢
最佳答案
许多库提供类似于 Windows 的 TryEnterCriticalSection 的机制.如果这返回一个信号,表明互斥量已被占用,那么您就有了答案。
但是你有一个比这更大的问题。在一个设计得当的多代码应用程序中,您永远不会遇到死锁或竞争条件,而且您当然不必手动插入另一个线程来操纵它的状态。
与其编写一些 hack,不如修复你的 bug。
关于c++ - 如何检查线程是否持有互斥锁C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558257/