我有一种情况,我想要做类似如下所示的事情,但似乎没有查询互斥体而不更改其状态的方法。我不希望someFunctionCalledRepeatedlyFromAnotherThread()
挂起来等待互斥锁被释放。它必须在执行一些替代操作后立即返回。我猜这个遗漏是为了安全起见的,因为在查询它和返回函数之间的锁定时间内,锁可能会释放。在我的情况下,如果锁定被释放,doSomeAlternativeAction()
正在发生,则不会发生坏事。事实上,我在这种情况下可能意味着我做错了什么,所以我应该如何改变我的设计?查询std :: mutex锁定状态
class MyClass
{
std::mutex initMutex;
public:
void someInitializationFunction()
{
std::lock_guard<std::mutex> lock(initMutex);
// Do some work
}
void someFunctionCalledRepeatedlyFromAnotherThread()
{
if (initMutex.isLocked())
{
doSomeAlternativeAction();
return;
}
// otherwise . . .
std::lock_guard<std::mutex> lock(initMutex);
// carry on with work as usual
}
}
您可能想要使用[std :: mutex :: try_lock](http://www.cplusplus.com/reference/mutex/mutex/try_lock/)。 – Jarod42
。 。 。但是这改变了互斥体的状态。 – learnvst
@learnvst但是只有当互斥锁没有被锁定,并且这种情况下,你的代码也会改变它的状态。 – Angew