当我编写多线程算法时,我发现一些方法对期望互斥锁的状态很有用。对于一些人来说它已经被锁定,对于一些人来说它还没有。
我想出了如何断言互斥锁是否已经被锁定的方法:
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/