如果锁定在同一个线程中,则提升共享互斥锁检查

时间:2015-03-26 17:13:35

标签: 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
     }

它显然会不时地失败,因为其他一些线程已将其锁定。

1 个答案:

答案 0 :(得分:0)

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