1、6设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售;销售者每次循环从仓库中取出一个产品进行销售。如果不允许同时入库,也不允许边入库边出库;而且要求生产和消费A产品和B产品的件数都满足以下关系:-nA的件数B的件数m,其中n、m是正整数。1. 第二类读者写者问题,信号量解决方法答:为了使写者优先,可在原来的读优先算法的基础上增加一个互斥信号量s,初值为1,使得当至少有一个写者准备访问共享对象时,它可以使后续的读者进程等待完成;整型变量writecount,初值为0,用来对写者进行计数;互斥信号量mutex,初值为1,用来实现多个读者
2、对写者writecount进行互斥访问。Process reader() while(1) wait(s);wait(rmutex);if(readcount=0)wait(wmutex);readcount+;signal(rmutex);signal(s);perform read operation;readcount-;if(readcount=0)signal(wmutex); Process writer()wait(mutex);if(writecount=0)wait(s);writecount+;signal(mutex);wait(wmutex);perform write
3、 operation;signal(wmutex);writecount-;if(writecount=0)signal(s);Main( )cobegin reader(); writer();2. 复印室里有一个操作员为顾客复印资料,有5把椅子供顾客休息等待复印。信号量:customers表示正在等待复印的顾客数量(不包括正在复印的顾客)operator记录正在等候顾客的操作员数,只有1和0mutex用于对waiting的访问; 变量:waiting表示等待的顾客数量。它实际上是customers的一个副本。之所以使用waiting是因为无法读取信号量的当前值。semaphore cust
4、omers=0,operator=0,mutex=1;waiting=0;process operator( )/操作员进程 wait(customers); /等待顾客到来 复印; signal(operator); /通知顾客已经完成复印process cusotmeri( )/顾客进程i if(waiting5)waiting+; signal(customers); signal(mutex); wait(operator); wait(mutex); waiting-; else 离开复印室;main( ) operator( ); customeri( );3、如果有三个进程R、W
5、1、W2共享一个缓冲器B,而B中每次只能存放一个数。S为互斥信号量,用来对缓冲器的互斥使用;SO和SE为资源信号量,SO表示是否允许进程W1打印;SE表示是否允许进程W2打印。semaphore S=1,SO=SE=0;buffer B;process R() int x;while(1)从输入设备上读一个数;x=接收的数;wait(S);B=x;if B=奇数 then signal(SO);else signal(SE);process W1() int y; wait(SO);y=B;signal(S);打印y中数;process W2() int z; wait(SE);z=B;打印z
6、中数 ;main() cobegin R(); W1(); W2();4. 现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。S:互斥访问缓冲器S1:是否可以供进程W1打印输出S2:是否可以供进程W2打印输出semaphore S=1,S1=S2=0;process R1()接收来自键盘的数;signal(S1);process R2() 从磁盘上读一个数;y=接收的数;B=y;signal(S2); int k;wait(Sl);k=B;打印k中数; int j;wait(S2);j=B;打印j中数; cobegin R1(); R2(); W1(); W2();5、有一
7、个仓库,可以存放A和B两种产品,但要求:分析:A产品的数量不能比B产品的数量少N个以上,A产品的数量不能比B产品的数量多M个以上设置两个信号量来控制A、B产品的存放数量,sa表示当前允许A产品比B产品多入库的数量,即在当前库存量和B产品不入库的情况下,还可以允许sa个A产品入库;sb表示当前允许B产品比A产品多入库的数量,即在当前库存量和A产品不入库的情况下,还可以允许sb个B产品入库。初始时,sa为M一1,sb为N一1。当往库中存放入一个A产品时,则允许存入B产品的数量也增加1;当往库中存放入一个B产品时,则允许存入A产品的数量也增加1。semaphore mutex=1,sa=M-1, s
8、b=N-1;process puta() 取一个产品; wait(sa); 将产品入库; signal(sb);process putb() wait(sb); signal(sa); cobegin puta(); putb();6、设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售;生产者A、B和消费者之间不能同时将产品入库和出库,故仓库是一个临界资源。生产的A、B产品必须满足:-nA的件数B的件数m,如练习5中,同样的方法管理,分别使用了信号量SAB和SBA;仓库的管理只要求出入库互斥,由于仓库无限大入库只需操作互斥就可以完成
9、,出库要考虑有无产品,SA对应于仓库中的A产品量,SB对应于仓库中的B产品量;销售要满足:-nA的件数B的件数m,用difference表示A的件数B的件数,即difference= A的件数B的件数;difference=-n的时候,不能取产品B,只能取A;difference=m的时候,不能取产品A,只能取B;-ndifferencem,即可以取产品A也可以取产品B;为了互斥地入库和出库,需为仓库设置一初值为1的互斥信号量mutex;为了使生产的产品件数满足-nA的件数B的件数m,须设置两个同步的信号量,其中SAB表示当前允许A生产的产品数量,其初值为m,SBA表示当前允许B生产的产品数量
10、,其初值为n;另外,还需设置一个整数difference表示所销售的A、B产品数量之差,而为了同步生产者和销售者并使销售的A、B产品的件数-nA的件数B的件数m,还需要设置三个资源信号量,其中S对应于仓库中的总的产品量,SA对应于仓库中的A产品量,SB对应于仓库中的B产品量,它们的初值都为0.Semaphore SAB=m,SBA=n,S=0,SA=0,SB=0,mutex=1;process A( ) while(1)/生产产品,-nA的件数B的件数m,方法同第4题wait(SAB);Produce a product A;signal(SBA);/入库操作,满足出入库操作互斥即可add t
11、he product A to the storehouse;signal(SA); /入库产品A一件,所以给SA增值signal(S); /入库产品一件,所以给S增值,S是仓库中全部产品的数量process B( )wait(SBA);Produce a product B;signal(SAB);signal(SB); /入库产品A一件,所以给SA增值process C( ) wait(S); /首先检查有无产品,无产品阻塞,有产品,下面操作将会取走一件产品,所以S减1 if(difference=-n) wait(SA); / difference=m) wait(SB); / diff
12、erence=m时只能取B产品一件,无B产品则需阻塞 take a product B from storehouse; difference-; /取B产品一件,difference- /-nm,即可以取产品A也可以取产品B,随意取一件产品出来,之后再根据取得产品是A还是B进行处理 take a product A 或B from storehouse; if(product_type=A) /取的是产品A,则信号量SA减1,这里不可能发生没有A产品,进程C需要阻塞的情况wait(SA);/取A产品一件,difference+ else /取的是产品B,则信号量SB减1,这里不可能发生没有B产品,进程C需要阻塞的情况wait(SB);/取B产品一件,difference- Sell the product; cobeginA();B();C();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1