Appearance
题目
计算机系统中的进程之间往往需要相互协作以完成一个任务。在某网络系统中缓冲区 B 用于存放一个数据分组,对 B 的操作有 C1、C2、C3:
- C1:将一个数据分组写入 B
- C2:从 B 中读出一个数据分组
- C3:对 B 中的数据分组进行修改
要求 B 为空时才能执行 C1,B 非空时才能执行 C2 和 C3。
请回答下列问题。
(1) 假设进程 P1 和 P2 均需执行 C1,实现 C1 的代码是否为临界区?为什么?(2 分)
(2) 假设 B 初始为空,进程 P1 执行 C1 一次,进程 P2 执行 C2 一次。请定义尽可能少的信号量,并用 wait()/signal() 操作描述 P1、P2 之间的同步或互斥关系,说明所用信号量的作用及初值。(3 分)
(3) 假设 B 初始不为空,进程 P1 和 P2 各执行 C3 一次,请定义尽可能少的信号量,并用 wait()/signal() 操作描述 P1 和 P2 之间的同步或互斥关系,说明所用信号量的作用及初值。(3 分)