檢查並設置

在計算機科學中 ， 檢查並設置 （ test - and - set - lock ， TSL ） 是一種不可中斷的原子運算 。 TSL對某個記憶體位置寫入1 （ set ） 並返回其舊值 。 在多個進程可同時訪問記憶體同個地址時 ， 如果一個程式正在執行TSL ， 其他程式在它執行完成前不能執行TSL 。 中央處理器可提供TSL指令 ， 或利用如雙埠隨機存取記憶體 （ Dual - ported RAM ） 等其它電子元件所提供的機制實現TSL 。 下述爲一種利用TSL指令來實現自旋鎖 ： function Lock ( boolean * lock ) { while ( test_and_set ( lock ) == 1 ) ; } 當舊值爲 0 時 ， 這程序可以得到鎖 。 否則的話 ， 它會一直嘗試將 1 寫入記憶體位置 ， 直到舊值爲 0 。 鎖 ( lock ) 的狀態一般是0 與1 。 因此下列test_and_set的實現是等價的 ： if ( lock == 0 ) then 置鎖, 進入臨界區; else 忙等待, 重新測試; endif 讀取lock狀態; lock被置爲1; 測試讀出的lock狀態 ， 判斷進入臨界區還是忙等待; x86彙編指令BTS ， 意味Bit Test and Set ， 就是一條原子操作的CPU指令 。 它把由操作數指定地址的鎖的狀態保存入CF寄存器 ， 然後鎖被設置爲1. 1991年證明test - and - set具有一個有限的 ， 能解決不超過2個併發進程的無等待問題 。