操作系统综合题之“用记录型信号量机制的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

 

posted @ 2024-03-21 15:28  骚哥  阅读(106)  评论(0编辑  收藏  举报