高并發(fā)(14)-CLH隊列鎖

@TOC

前言

上篇文章講解了并發(fā)中的顯式鎖與內置鎖,今天就講講CLH隊列鎖

什么是CLH隊列鎖

CLH鎖即Craig, Landin, and Hagersten (CLH)

CLH鎖也是一種基于鏈表的可擴展、高性能、公平的自旋鎖,線程只需要在本地自旋,查詢前驅節(jié)點的狀態(tài),如果前驅節(jié)點釋放了鎖,就結束自旋。

CLH的原理

因為CLH是一個基于鏈表的自旋鎖,所以CLH也就是個鏈表。

當一個線程需要獲得鎖的時候,就會創(chuàng)建一個新的QNode。并將QNode的locked設置為true標識要獲取鎖,并且調用tail的getAndSet方法,讓自己成為隊列的尾部,同時獲取一個指向前驅節(jié)點的myPred。然后就對前驅記節(jié)點的locked自旋,一直到前驅節(jié)點釋放鎖(locked為false)

當一個線程釋放鎖的時候,就將當前節(jié)點的locked設為false,并且將前驅節(jié)點收回,這時候之后節(jié)點就在自旋中檢測到了前驅節(jié)點的鎖釋放,然后去獲取鎖。

CLH隊列圖
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容