操作系統之QQ作業-9

  1. 假設進程P0對變量V0和V1執行遞增操作,進程P1對變量V1和V2執行遞減操作,進程P2對變量V2執行遞增操作,對變量V0執行遞減操作。這三個進程併發執行,請給出一段代碼,說明使用信號量操作如何避免臨界區問題的發生。
//3個臨界資源,對應爲下面的v1,v2,v3
//沒有前驅關係,有2個臨界區
int v0=0,v1=10,v2=100;
semaphore a=1.b=1,c=1;
void p0(){wait(a);v0++;signal(a);wait(b);v1++;signal(b)}
void p1(){wait(b);v1--;signal(b);wait(c);v2--;signal(c)}
void p2(){wait(a);v0--;signal(a);wait(c);v2++;signal(c)}

main()
{
cobegin{
   p0();p1();p2();
         }
cout<<'\n'<<"v0=0"<<'\t'<<"v1="<<v1<<'\t'<<"v2="<<v2<<endl;
}
  1. 設有售票大廳可容納200人購票,如果廳內不足200人則允許進入,超過則在廳外等候;售票員只能給一個購票者服務,購票者買票後即離開售票大廳。試問
    (1)購票者之間是否存在制約關係?
    (2)給出一段代碼,說明如何使用信號量機制解決臨界區問題。
//購票者之間存在制約關係,他們之間表現爲互斥關係
//舉例爲僅設置10個購票者來觀察情況
int ticket_saled=0;
semaphore ticket_lobby=5;
semaphore conductor=1;
atomic void printpasStr(int id){cout<<id<<"'s passenger done."<<endl;}

void passenger(int id){
      wait(ticket_lobby);
      wait(conductor);
      ticket_saled++;
      signal(conductor);
      signal(ticket_lobby);
      printpasStr(id);
}

void main(){
   cobegin{
         passenger(1);passenger(2);passenger(3);passenger(4);passenger(5);
         passenger(6);passenger(7);passenger(8);passenger(9);passenger(10);
}
cout<<"the saled ticket is:"<<ticket_saled<<endl;
}

在這裏插入圖片描述
這裏能夠得到相應的結果,舉例爲僅設置10個購票者;來觀察情況

  1. 有四個進程ABCD,共享同一個緩衝區。進程A向緩衝區中寫入消息,其它3個進程從緩衝區中讀取消息。要求進程A必須等其它3個進程都讀取消息後才能發送下一條消息。緩衝區一次只能容納一條消息。請給出一段代碼,說明如何使用信號量機制實現這4個進程存取消息的過程。
//A、B之間,A、C之間,A、D之間存在臨界資源
//讀、寫操作互爲臨界區
int buffer;
int data=0;
semaphore ab=0,ac=0,ad=0,ba=1,ca=1,da=1;
void A(){
    while(1){
    wait(ba);wait(ca);wait(da);
    buffer=data++;
    signal(ab);signal(ac);signal(ad);
    }
}

void B(){
    while(1){
    wait(ab);
    cout<<"R1-read:"<<buffer<<endl;
   signal(ba);
   }
}

void C(){
     while(1){
    wait(ac);
    cout<<"R2-read:"<<buffer<<endl;
    signal(ca);
    }
}

void D(){
    while(1){
    wait(ad);
    cout<<"R3-read:"<<buffer<<endl;
    signal(da);
    }
}

void main(){
    cobegin{
      A();B();C();D();
    }
}

大致如此,先丟在這裏,明天去仿真模擬環境再試試
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章