操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出是那个进程的同步代码(缓冲区-代码补充)"
1.问题:假设系统有三个并发进程read、move和print共享缓冲区B1和B2。进程read负责从输入设备上读取信息,每读取一条记录后把它存如缓冲区B1中;进程move负责从缓冲区B1中取出一条记录,整理后放入缓冲区B2;进程print负责将缓冲区B2中的记录取出并打印输出。缓冲区B1和B2每次只能存放1个记录。要求三个进程协调完成任务,使打印出来的记录与读入的记录个数和次序完全一样。
(1)列出所需的信号量并初始化
(2)用记录型信号量机制的wait操作和signal操作写出是那个进程的同步代码
2.参考答案
(1)
答:
var e1, f1, e2, f2:semaphore;
e1.value = 1;
f1.value = 1;
e2.value = 0;
f2.value = 0;
(2)
答:
read:
Begin
Repeat
wait(e1);
读取一条记录放入缓冲区B1中;
signal(f1);
Until false;
End
------------------------------------
move:
Begin
Repeat
wait(f1);
从B1中取出一条记录;
signal(e1);
wait(e2);
整理记录并放入缓冲区B2中
signal(f2);
Until false;
End
---------------------------------------
write:
Begin
Repeat
wait(f2);
从缓冲区B2中取出一条记录并打印;
signal(e2);
Until false;
End
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com