[英]std::shared_mutex recursive protection by thread_local storage
這個想法是可以使用std::shared_mutex
,但在同一線程調用用於獨占訪問的std::shared_mutex::lock()
情況下保護死鎖。
例如:
std::shared_mutex m;
void f2()
{
m.lock();
}
void f1()
{
m.lock();
f2();
}
f1()
會鎖定,因為 std::shared_mutex 不能遞歸調用。 為此,我有兩個選擇:要么使用我自己的讀寫互斥鎖tlock ,它使用支持遞歸鎖定的 Windows Mutex,要么使用這種基於thread_local
變量的鎖定函數:
thread_local bool LockedStuff = 0;
void Lock(std::function<...> f)
{
if (LockedStuff)
{
f(...);
return;
}
LockedStuff = 1;
m.lock();
f(...);
m.unlock();
LockedLinks = 0;
}
問題是,上面的實現有什么我遺漏的地方嗎? 非常感謝。
你沒有 RAII 你的互斥鎖和線程局部變量。 如果在函數內部調用異常,您的互斥鎖將永遠被鎖定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.