c++ - 如何检查线程是否持有互斥锁C++

标签 c++ multithreading unix

在我的应用程序 (C++/Linux) 中,有时线程在被取消时会获取互斥锁(递归)。这会导致死锁,因为其他线程也使用相同的互斥锁但无法获取它。

现在可以检查该线程是否正在锁定任何互斥锁。我的动机是手动清除线程正在锁定然后取消线程。

我能想到的一种可能的方法是维护一个计数器。也欢迎任何更好的方法..

提前致谢

最佳答案

许多库提供类似于 Windows 的 TryEnterCriticalSection 的机制.如果这返回一个信号,表明互斥量已被占用,那么您就有了答案。

但是你有一个比这更大的问题。在一个设计得当的多代码应用程序中,您永远不会遇到死锁或竞争条件,而且您当然不必手动插入另一个线程来操纵它的状态。

与其编写一些 hack,不如修复你的 bug。

关于c++ - 如何检查线程是否持有互斥锁C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558257/

相关文章:

java - 如果一段代码没有在一定的时间限制内返回,如何在 Java 中导致一段代码超时?

c++ - 关于如何解决此错误的任何想法?

c# - 无法添加对 WinRT C++ DLL 项目的引用

c++将大文本文件读取为字符串(大于string::max_size)

C++:将自身结构的地址作为参数传递给 pthread_create 时出错:什么覆盖了我的数据?

multithreading - 当函数具有互斥锁时,为什么要使它递归?

c++ - gdb 核心无法访问内存

linux - 如何创建一个 debian 软件包,在更新软件包时仅更新所需的文件

c++ - Boost asio async_read (async_write) 包装器

c++ - 移动/拖动无框窗口? [Qt]