c++ - boost 共享互斥锁检查是否锁定在同一个线程中

标签 c++ multithreading boost boost-mutex

当我编写多线程算法时,我发现一些方法对期望互斥锁的状态很有用。对于一些人来说它已经被锁定,对于一些人来说它还没有。

我想出了如何断言互斥锁是否已经被锁定的方法:

ASSERT(!mutex.try_lock_shared()); // assert if the mutex is not uniquely locked

ASSERT(!mutex.try_lock()); // assert if the mutex is not at least shared locked

问题是我如何断言检查互斥量是否未锁定...来自当前线程。例如,如果我这样做

     if (mutex.try_lock()) {
        mutex.unlock();
     } else {
        ASSERT(false); // the mutex is locked
     }

它显然有时会失败,只是因为其他线程已将其锁定。

最佳答案

boost 有递归和非递归互斥量。如果函数是可重入的,请使用递归互斥锁。那么你不用担心当前线程是否已经锁定了它。

关于c++ - boost 共享互斥锁检查是否锁定在同一个线程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284789/

相关文章:

c++ - 如何在 C/C++ 中使用磁带进行操作?

c++ - 将 .bat 转换为 .exe 而不依赖于 cmd.exe

c# - 任务类的实例(Task.Factory.StartNew 或 TaskCompletionSource)

c++ - SetThreadContext 在 x64 中仅修改 RIP 的最后 32 位

c++ - 用C++读取二进制数据并写入MySQL

c++ - 在 OpenCV C++ 中查找 Mat() 的所有峰值

android - android如何在按下按钮时停止音频线程?

c++ - 使用 Boost 查询点

c++ - 如何迭代 boost::property_tree 中的 XML 结构

c++ - MinGW 下带有 boost::filestream 的 UTF-8 名称