簡體   English   中英

成功的互斥鎖鎖定

[英]Succesive mutex locks blocking

出於好奇,我嘗試了一些操作,但似乎不起作用。 在同一功能中

std::mutex mtx1,mtx2;
mtx1.lock ();
mtx2.lock ();
mtx1.unlock ();
mtx2.unlock ();

然后我為幾個線程啟動它。 意外地(對我而言)陷入僵局。 我想知道為什么。

(對誰感興趣,為什么我想知道這樣的事情,這個想法是創建一個互斥鎖字典,並保護對該互斥鎖字典的訪問)

您在評論部分發布的代碼與問題中的代碼不同。 您的序列如下所示:

mtx1.lock();    // 1
mtx2.lock();    // 2
mtx1.unlock();  // 3
                // 4
mtx1.lock();    // 5
mtx2.unlock();  // 6
mtx1.lock();    // 7

一個線程獲取mtx2並嘗試鎖定mtx1 (第5行)。 另一個線程鎖定mtx1 ,然后繼續鎖定mtx2 (第2行)。

您對兩個互斥使用不同的鎖定順序。 這是死鎖的經典示例。

始終應以相同的順序獲取鎖,以避免死鎖。 解鎖可以以任何順序進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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