欢迎来到天天文库
浏览记录
ID:55036891
大小:1.26 MB
页数:35页
时间:2020-05-08
《操作系统生产者—消费者问题.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、3.3生产者—消费者问题多缓冲区的同步互斥问题同步:当缓冲池已放满了产品时(供过于求),生产者进程必须等待;当缓冲池已空时(供不应求),消费者进程应等待。互斥:所有进程应互斥使用缓冲池这一临界资源。13.3生产者—消费者问题多缓冲区的生产者─消费者问题解法设置三个信号量mutex,empty,full的初始值分别为1,k,0;思考:P操作的顺序可换吗?23.3生产者—消费者问题注意:此解中,无论是生产者进程还是消费者进程,V操作的次序无关紧要,但P操作的次序不能随意交换,否则可能造成死锁。例如,若将生产者进程中的P(empty)与P(mutex)的次序交换,则在一定条件下就会出现死锁现
2、象。3为将k个缓冲区管理成是循环的,须设置两个指针,一个指明当前哪个缓冲区是空闲的,可往里面存放物品;一个指明当前可从哪个位置取出物品进行消费。前一个指针起名“in”,后一个起名“out”,初值都为0。图(a)表示往缓冲区里存放4个物品、取出一个物品后,指针in和out的位置;图(b)表示往缓冲区里存放k+2个物品、取出4个物品后,指针in和out的位置。3.3生产者—消费者问题各生产者和消费者对缓冲区的操作应互斥,即对缓冲区的操作应为临界区。所以,要设一个初值为1的信号量mutex,用于实现临界区的互斥。“生产者-消费者”问题的解决,要设置:①full:初值为0的信号量,表示缓冲区中
3、已有的物品个数;②empty:初值为k的信号量,表示缓冲区中可供使用的缓冲区数目;③mutex:初值为1的信号量,用于互斥使用缓冲区;④in:初值为0,指示当前存放物品的缓冲区位置;⑤out:初值为0,指示当前取出缓冲区中物品的位置。3.3生产者—消费者问题Producer():/*生产者进程程序*/while(TRUE){生产一个物品;P(empty);/*申请缓冲区里的空位*/P(mutex);/*进入临界区*/物品存入buffer[in];in=(in+1)modk;/*调整存放指针in*/V(mutex);/*退出临界区*/V(full);/*缓冲区里的物品计数*/}Consu
4、mer():/*消费者进程程序*/{P(full);/*缓冲区里有物品吗?*/P(mutex);/*进入临界区*/从buffer[out]取出物品;out=(out+1)modk;/*调整取出指针out*/V(mutex);/*退出临界区*/V(empty);/*缓冲区里增加一个空位*/消费取出放入物品;}“生产者-消费者”算法描述如下:3.3生产者—消费者问题某招待所有100个床位,住宿者入住时要先登记(在登记表上填写姓名和床位号),离去时要销掉登记项(在登记表上删去姓名和床位号)。请给出住宿登记和销掉登记过程的算法描述。习题桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一
5、个水果。爸爸专向盘子中放苹果(apple),妈妈专向盘子中放橘子(orange),两个儿子专门吃盘子中的橘子,两个女儿专门吃盘子中的苹果。请用P、V操作来实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系。习题工厂有两个生产车间和一个装配车间,两生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件组装成产品。两个生产车间每生产一个零件后都要分别把它们送到装配车间的货架F1和F2上,F1存放A,F2存放B,F1和F2均只能容纳一个零件。每当能从货架上取到一个A和一个B后就可以组装成一件产品。整个过程是自动进行的,试用P、V操作进行管理,使各车间相互合作、协调工作。习题Proces
6、sP3beginL3:P(S3);X=F1;//从F1上取零件AV(S1);P(S4)Y=F2;//从F2上取零件BV(S2);组装产品;gotoL3;end;coend;end;beginS1,S2,S3,S4:semaphore;S1=S2=1;S3=S4=0;cobeginProcessP1beginL1:生产一个零件A;P(S1);F1=A;V(S3);gotoL1;end;ProcessP2beginL2:生产一个零件B;P(S2);F2=B;V(S4);gotoL2;end;3.4读者—写者问题有两组并发进程:读者和写者,共享一组数据区要求:允许多个读者同时执行读操作不允许
7、读者、写者同时操作不允许多个写者同时操作113.4读者—写者问题读者--写者问题有两种类型:第一类:读者优先-附解当写者提出了写的要求后,允许新的读者继续进入(√)第二类:写者优先当写者提出了写的要求后,不允许新的读者进入123.4读者—写者问题(1)构筑读者进程和写者进程间的临界区对这批数据,要保证读者和写者互斥使用,也要保证写者和写者互斥使用。设置信号量wrt,用来在读者和写者程序中构成如图所示的临界区。这种安排在某读者进入临界区使用数据时
此文档下载收益归作者所有