高併發(14)-CLH隊列鎖

高併發(14)-CLH隊列鎖

前言

上篇文章講解了併發中的顯式鎖與內置鎖,今天就講講CLH隊列鎖

什麼是CLH隊列鎖

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

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

CLH的原理

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

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

當一個線程釋放鎖的時候,就將當前節點的locked設爲false,並且將前驅節點收回,這時候之後節點就在自旋中檢測到了前驅節點的鎖釋放,然後去獲取鎖。

CLH隊列圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章