方案一:中斷屏蔽方法
開關中斷指令:
- 執行關中斷指令
- 臨界區操作
- 執行開中斷指令
特點:
- 簡單高效
- 代價高,限制CPU併發能力(臨界區大小)
- 不適用於多處理器
- 適用於操作系統本身,不適於用戶進程
方案二:測試並加鎖指令
TSL指令:TEST AND SET LOCK
enter_region:
TSL REGISTER, LOCK /*複製鎖到寄存器並將鎖置1*/
CMP REGISTER, #0 /*判斷寄存器內容是否爲0*/
JNE enter_region /*若不是0跳轉到enter_region*/
RET /*返回調用者,進入臨界區*/
leave_region:
MOVE LOCK, #0 /*在鎖中置0*/
RET /*返回調用者*/
方案三:交換指令
XCHG指令:EXCHANGE
enter_region:
MOVE REGISTER, #1 /*給寄存器中置1*/
XCHG REGISTER, LOCK /*交換寄存器與鎖變量的內容*/
CMP REGISTER, #0 /*判斷寄存器內容是否爲0?*/
JNE enter_region /*若不是0跳轉到enter_region*/
RET /*返回調用者,進入臨界區*/
leave_region:
MOVE LOCK, #0 /*在鎖中置0*/
RET /*返回調用者*/