簡體   English   中英

線程本地存儲的 std::shared_mutex 遞歸保護

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM