1【例1】有三个进程PA、PB和PC协作解决文件打印问题:PA将文件记录从磁盘读入内存的缓冲区1中,每执行一次读一个记录;PB将缓冲区1中的内容复制到缓冲区2中,每执行一次复制一个记录;PC将缓冲区2中的内容打印出来,每执行一次打印一个记录
缓冲区的大小与记录大小一样
请用信号量来保证文件的正确打印
答:该文件打印过程的同步算法可描述如下:【例2】进程A1、A2、⋯An1通过m个缓冲区向进程B1、B2、⋯Bn2不断地发送消息
发送和接收工作遵循如下规则:(1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小与消息长度一样
(2)对于每一个消息,B1、B2、⋯Bn2都需各接收一次,读入自己的数据区内
(3)m个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等待
试用wait,signal操作描述它们的同步关系
分析:本题是生产者-消费者问题的一个变形
由于每个缓冲区都只写一次,但要读n2次,故我们可将每个缓冲区看成是由n2格组成的
只有当某个缓冲区的n2格都空闲时,才允许写入,varempty1,full1,empty2,full2:semaphore:=1,0,1,0;beginparbeginPA:beginrepeat从磁盘读一个记录;wait(empty1);将记录存放到缓冲区1中;signal(full1);untilfalseendPB:beginRepeatwait(full1);从缓冲区1中取出一个记录;signal(empty1);wait(empty2);将记录复制到缓冲区2中;signal(full2);untilfalseendPC:beginrepeatwait(full2);从缓冲区2中取出一个记录;signal(empty2);将取出的记录打印出来;untilfalseendparendendGeneratedbyFoxitPDF