我需要在工作方法中對unique_lock :: owns_lock()進行斷言,但我不'想要傳遞unique_lock作爲參數,而是將其用作靜態變量。但這意味着我不能使用unique_lock來實現其RAII行爲。 有這樣的代碼是否公平:是std :: lock_guard <std :: unique_lock <std::mutex>>有效還是推薦?
namespace
{
std::mutex gMtx;
std::unique_lock<std::mutex> gLock(gMtx, std::defer_lock);
}
void foo()
{
assert(gLock.owns_lock());
// ...
}
void bar()
{
std::lock_guard<std::unique_lock<std::mutex>> lock(gLock);
//...
foo();
//...
}
想法?
這樣做似乎有效。 的#include 「stdafx.h中」 #包括使用命名空間std 的#include 的#include 的#include ; namespace { mutex gMtx; unique_lock gLock(gMtx,defer_lock); } void foo(const string&msg) assert(gLock.owns_lock()); cout << msg << endl; } void bar() { lock_guard > lock(gLock); foo(「bar()」); } int main() { bar(); return 0; } –
asterisc
作爲解決方法,您可以將互斥量更改爲recursive_mutex,並將其鎖定在'foo()'中。 –