作業系統 第二章 4 訊號量基本應用
阿新 • • 發佈:2018-12-11
1、實現程序互斥
注意:
- 互斥訊號量mutex初值為1;
- 每個程序中將臨界區程式碼置於P(mutex)和V(mutex)原語之間;
- 必須成對使用P和V原語(在同一程序中),不能次序錯誤、重複或遺漏: 遺漏P原語則不能保證互斥訪問 遺漏V原語則不能在使用臨界資源之後將其釋放(給其他等待的程序);
seamphore m=1;
void main()
{cobegin p1; cobegin p2; }
p1{ wait(m); user r; signal(m); }
p2{ wat(m); user r; signal(m); }
2、實現程序有序
注意:
- 訊號量值為0
- 成對使用P和V原語(在有先後關係的兩個程序中),不能次序錯誤、重複或遺漏,否則同步順序出錯。
併發執行的程序P1和P2中,分別有程式碼C1和C2,要求C1要在C2開始前完成; 為每對前趨關係設定一個同步訊號量S12,並賦初值為0。則只有V操作所在程序獲得cpu時能執行。
用可能錯誤的順序驗證:
ep:
設有一供者和一用者,如何用訊號量來控制二者對緩衝區的同步使用。
seamphore s=0;
void main()
{cobegin p1; cobegin p2; }
p1{ f=c1(); signal(s); }
p2{ wat(s); c1(f); }
3、實現計數控制
seamphore s=5(個數,這裡假設是5);
void main()
{cobegin p1; cobegin p2; }
p1{wat(s); user r;}
p2{ wat(s); user r;}