前提:進程訪問臨界區的一般結構
進入區 |
臨界區
退出區 |
剩餘區
解決互斥問題:TS指令和Swap指令
- TS(Test and Set)指令
TS的指令的功能是讀出指定標誌後把該標誌設爲turn。
Boolean TS(lock);
Boolean lock;
{ Boolean temp;
Temp=lock;
Lock=true;
Return temp;
}
While(TS(LOCK)) |
臨界區
Lock=false |
剩餘區
爲了實現進程對臨界區的訪問,可爲每個臨界資源設置一個布爾變量lock,表示資源的兩種狀態,true表示正被佔用;fasle表示空閒。在進入區檢查和修改標誌lock;有進程在臨界區時,循環檢查,直到其他進程退出時通過檢查進入臨界區。所有要訪問臨界資源的進程在進入區和退出區的代碼是相同的。
- Swap指令
Swap指令的功能是交換兩個字節的內容
Void Swap(a,b);
Boolean a,b;
{ Boolean trmp;
Temp=a;
a=b;
b=temp;
Key=true; Do{ Swap(lock,key) }while(key); |
}
臨界區
Lock=false; |
剩餘區
利用Swap指令實現進程互斥算法,爲每個臨界資源設置一個全局布爾變量lock,初始值爲false;每個進程設置一個局部布爾變量key.在進入區利用Swap指令交換lock和key的內容,然後檢查key的狀態;有進程在臨界區時,循環交換和檢查過程,直到其他進程退出時檢查通過,進入臨界區。