1. 程式人生 > >作業系統 第二章 4 訊號量基本應用

作業系統 第二章 4 訊號量基本應用

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;}