main ( ) {
cobegin
prog1 ( );
prog2 ( ); prog3 ( ); prog4 ( ); prog5 ( prog6 ( prog7 ( coend }
prog1 ( ) {
… v ( f1 ); v ( f1 ); v ( f1 ); }
prog2 ( ) {
… v ( f2 ); v ( f2 ); v ( f2 ); }
prog 3 ( ) {
p ( f1 ); p ( f2 );
… v ( f3 ); }
prog 4 ( ) {
p ( f1 ); ); ); ); p ( f2 );
v ( f4 );
}
prog 5 ( ) {
p ( f1 ); p ( f2 );
v ( f5 ); }
prog 6 ( ) {
p ( f3 );
v ( f6 ); }
prog 7 ( ) {
p ( f5 );
v ( f7 ); }
prog8 ( ) {
p ( f4 ); p ( f6 ); p ( f7 ); }
15.在本题中,我们可以设置两个信号量来控制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。 产品A、B的入库过程描述如下: int mutex=1; int sa= M – 1; int sb= N – 1; main ( ) {
while ( 1 ) {
取一个产品; if ( 取的是A产品) {
P ( sa ) ;
P ( mutex ) ; 将产品入库; v ( mutex ) ;
v ( sb ) ; }
else /*取的产品是B*/ {
P ( sb ) ;
P ( mutex ) ; 将产品入库; v ( mutex ) ;
v ( pa ) ; } } }
16.在本题中,应设置一个信号量mutex实现诸进程对缓冲区的互斥访问;两个信号量数组empty[n2]和full [n2]描述n2组缓冲区的使用情况。Mutex的初值为1;数组empty中的元素初值为m;数组full中的元素初值为0。其同步关系描述如下: int mutex , empty[n2] , full [n2] ; int i ;