操作系统之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();
    }
}

大致如此,先丢在这里,明天去仿真模拟环境再试试
在这里插入图片描述

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