自旋鎖

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