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