问答题 假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它,但是要卷起并抽掉一支烟,抽烟者需要有三种材料:烟草、纸和胶水。一个抽烟者有烟草、另一个有纸,第三个有胶水。供应者进程无限地提供三种材料,供应者每次将两种材料放到桌子上,拥有剩下那种材料的抽烟者卷一根烟并抽掉它,并给供应者一个信号告诉完成了,供应者就会放另外两种材料在桌上,这种过程一直重复(让3个抽烟者轮流地抽烟)。请用信号量及PV操作实现这四个进程的并发执行。
【正确答案】正确答案:int random; //存储随机数 semaphore offeri=0; //定义信号量对应烟草和纸组合的资源 semaphore offer2=0, //定义信号量对应烟草和胶水组合的资源 semaphore offer3=0; //定义信号量对应纸和胶水组合的资源 semaphore finish=0 ; //定义信号量表示抽烟是否完成 //供随着 while(1){ random=任意一个整数随机数; random=random%3; if(random==01 signal(offer1); else if(random==1) signal(offer2); else signal(offer3); 任意两种材料放在桌子上; wait(finish); } //拥有烟草者 while(1) { wait(offer3); 拿纸和胶水,卷成烟,抽掉; signal(finish); } //拥有纸者 while(1){ wait(offer2); 拿烟草和胶水,卷成烟,抽掉; signal(finish); } //拥有胶水者 while(1)( wait(offer1); 拿烟草和纸,卷成烟,抽掉, signal(finish); }
【答案解析】