自旋鎖
維基百科,自由的 encyclopedia
自旋鎖是計算機科學用於多執行緒同步的一種鎖,執行緒反覆檢查鎖變量是否可用。由於執行緒在這一過程中保持執行,因此是一種忙等待。一旦獲取了自旋鎖,執行緒會一直保持該鎖,直至顯式釋放自旋鎖。
自旋鎖避免了進程上下文的調度開銷,因此對於執行緒只會阻塞很短時間的場合是有效的。因此作業系統的實現在很多地方往往用自旋鎖。Windows作業系統提供的輕型讀寫鎖(SRW Lock)內部就用了自旋鎖。顯然,單核CPU不適於使用自旋鎖,這裡的單核CPU指的是單核單執行緒的CPU,因為,在同一時間只有一個執行緒是處在運行狀態,假設運行執行緒A發現無法獲取鎖,只能等待解鎖,但因為A自身不掛起,所以那個持有鎖的執行緒B沒有辦法進入運行狀態,只能等到作業系統分給A的時間片用完,才能有機會被調度。這種情況下使用自旋鎖的代價很高。
獲取、釋放自旋鎖,實際上是讀寫自旋鎖的存儲內存或暫存器。因此這種讀寫操作必須是原子的。通常用test-and-set等原子操作來實現。[1]