[英]std::scoped_lock and mutex ordering
我正在嘗試確定std::scoped_lock 是否嘗試建立一個排序或互斥 ID 以按規定的順序獲取鎖。 我不清楚它是否是通過對我在谷歌搜索中發現的可瀏覽實現的稍微簡短的了解來實現的。
如果它不這樣做,那么最接近獲取有序鎖集的標准實現的是什么?
通常避免死鎖的最干凈的方法是始終以相同的順序獲取一組鎖(是的,當然,在嘗試再次獲取新鎖之前總是釋放它們,但也許 2PL 有點超出標准的 scope std::scoped_lock
應該旨在做)
std::lock
的順序直到運行時才定義,並且不固定。 它是通過算法針對每次對std::lock
的單獨調用通過實驗發現的。 對std::lock
的第二次調用可能會以與第一次不同的順序鎖定互斥鎖,即使這兩個調用可能在調用站點以相同的順序使用相同的互斥鎖列表。
下面是對std::lock
的幾種可能實現的詳細性能分析: http://howardhinnant.github.io/dining_philosophers.html
使用固定順序的互斥量是上述鏈接中進行性能比較的算法之一。 對於所進行的實驗,它不是性能最好的算法。
OP 指向的libstdc++ 實現是分析標簽“智能和禮貌”的高質量實現
scoped_lock
的構造函數被聲明為在其互斥量上調用std::lock
,因此其行為受此 function 的約束。並且std::lock
被專門定義為避免在其鎖定的內容上發生死鎖。 它鎖定互斥量的順序未定義,但不會導致死鎖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.