[英]Why is locking a std::mutex twice 'Undefined Behaviour'?
因為它永遠不會在正確的程序中發生,並且對永遠不會發生的事情進行檢查是浪費的(並且要進行檢查需要存儲擁有線程的 ID,這也是浪費)。
請注意,未定義它允許調試實現拋出異常,例如,同時仍然允許發布實現盡可能高效。
未定義的行為允許實現做任何最快/最方便的事情。 例如,非遞歸互斥體的有效實現可能是單個位,其中鎖定操作是通過循環中的原子比較和交換指令實現的。 如果擁有互斥鎖的線程試圖再次鎖定它,它將死鎖,因為它正在等待互斥鎖解鎖,但因為沒有其他人可以解鎖它(除非存在其他一些不擁有它的線程解鎖它的錯誤)線程將永遠等待。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.