1. 程式人生 > >分布式鎖實現極速飛艇源碼定制原理

分布式鎖實現極速飛艇源碼定制原理

就是 論壇 上下 需要 就會 無法 重入 一個 tran

1 自旋鎖

   自旋鎖如果已經被別的線程獲取,調用者就一直循環在那裏看是否該自旋鎖的保持者已經釋放了鎖,”自旋”一詞就是因此而得名。自旋鎖是一種非阻塞鎖,也就是說,如果某線程需要獲取自旋鎖,但該鎖已經被其他線程占用時,該線程不會被掛起,而是在不斷的消耗CPU的時間,不停的試圖獲取自旋鎖。

2 互斥鎖 (Mutex Lock)
互斥鎖是阻塞鎖,也是我們最常用的一種鎖,當某線程無法獲取互斥鎖時,該線程會被直接掛起,不再消耗CPU時間,當其他線程釋放互斥鎖後,操作系統會喚醒那個被掛起的線程。阻塞鎖可以說是讓線程進入阻塞狀態進行等待,當獲得相應的信號(喚醒,時間)時,才可以進入線程的準備就緒狀態,準備就緒狀態的所有線程,通過競爭進入運行狀態。它的優勢在於,阻塞的線程不會占用 CPU 時間, 不會導致 CPU 占用率過高,但進入時間以及恢復時間都要比自旋鎖略慢。在競爭激烈的情況下阻塞鎖的性能要明顯高於自旋鎖。

分布式鎖實現原理極速飛艇源碼定制,需要請搜索【大神源碼論壇】dsluntan.com 客服企娥3393756370 V信17061863513,
上面兩種鎖適用於不同場景:如果是多核處理器,預計線程等待鎖的時間很短,短到比線程兩次上下文切換時間要少的情況下,使用自旋鎖是劃算的。如果是多核處理器,如果預計線程等待鎖的時間較長,至少比兩次線程上下文切換的時間要長,建議使用互斥鎖。如果是單核處理器,一般建議不要使用自旋鎖。因為,在同一時間只有一個線程是處在運行狀態,那如果運行線程發現無法獲取鎖,只能等待解鎖,但因為自身不掛起,所以那個獲取到鎖的線程沒有辦法進入運行狀態,只能等到運行線程把操作系統分給它的時間片用完,才能有機會被調度。這種情況下使用自旋鎖的代價很高。如果加鎖的代碼經常被調用,但競爭情況很少發生時,應該優先考慮使用自旋鎖,自旋鎖的開銷比較小,互斥量的開銷較大。

3 可重入鎖 (Reentrant Lock)
可重入鎖是一種特殊的互斥鎖,它可以被同一個線程多次獲取,而不會產生死鎖。首先它是互斥鎖:任意時刻,只有一個線程鎖。即假設A線程已經獲取了鎖,在A線程釋放這個鎖之前,B線程是無法獲取到這個鎖的,B要獲取這個鎖就會進入阻塞狀態。其次,它可以被同一個線程多次持有。即,假設A線程已經獲取了這個鎖,如果A線程在釋放鎖之前又一次請求獲取這個鎖,那麽是能夠獲取成功的。

分布式鎖實現極速飛艇源碼定制原理