我有一種情況,我想要做類似如下所示的事情,但似乎沒有查詢互斥體而不更改其狀態的方法。我不希望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