下载此文档

例题以及习题pv操作3.doc


文档分类:法律/法学 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
【实战3】理发师问题理发店有一位理发师、一把理发椅及三把供等候理发的顾客坐的椅子。如果没有顾客,理发师就去睡觉。如果顾客来时所有的椅子都有人,那么顾客就离去。如果理发师在忙而有空闲的椅子,那么顾客就会坐在其中的一个空闲的椅子上。如果理发师在睡觉,顾客会唤醒他。请利用信号量(semaphores),写个程序来协调理发师和顾客进程。【浙江大学2007】intcount=0;//记录理发店里的顾客数量semaphoremutex=1;//用于互斥访问count变量所用的信号量semaphorebarber_chair=0;//semaphorewait_chair=3;//顾客等待时可坐的椅子semaphoreready=0;//坐在等候椅子上等待理发的顾客数量Barber(){//理发师进程while(1){wait(ready);//是否有顾客在等待理发,没有则阻塞signal(barber_chair);//请等待时间最长的顾客坐到理发椅上signal(wait_chair);//坐到理发椅上的顾客让出一个等待时可坐的椅子barbering//给顾客理发}}Customer(){//顾客进程i{wait(mutex);if(count>=4){//如果理发店已经有四个顾客了signal(mutex);leave//走人}else{//理发店里顾客不足4个count++;//更新顾客人数signal(mutex);}wait(wait_chair);//先请求坐等待时坐的椅子signal(ready);//告诉理发师又有一位顾客准好了,等待理发wait(barber_chair);//再请求坐理发椅bebarberedwait(mutex);count--;//更新店里的顾客人数signal(mutex);}}【练****1】如图所示,有多个PUT操作同时向BUFF1放数据,有一个MOVE操作不断地将BUFF1的数据移到BUFF2,有多个GET操作不断地从BUFF2中将数据取走。BUFF1的容量为m,BUFF2的容量是n,PUT、MOVE、GET每次操作一个数据,在操作的过程中要保证数据不丢失。试用P、V原语协调PUT、MOVE的操作,并说明每个信号量的含义和初值。进程操作图【分析】这里存在两个一般意义的“生产者—消费者”问题,PUT(生产者)与MOVE(消费者)之间,需要设置三个信号量;MOVE(生产者)与GET(消费者)之间,需要设置三个信号量。PUT进程套用生产者进程即可,MOVE进程只有在Buff1有新数据且Buff2有空闲区的时候才移动数据,GET进程套用消费者进程即可。答案:设置6个信号量full1、empty1、B-M1、full2、empty2、B-M2,它们的含义和初值如下:full1表示Buff1是否有数据,初值为0;empty1表示Buff1有空间,初值为m;B-M1表示Buff1是否可操作,初值为1;Full2表示Buff2是否有数据,初值为0;Empty2表示

例题以及习题pv操作3 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人一花一世
  • 文件大小63 KB
  • 时间2019-02-22