(9)现有三个并发进程:R负责从输人设备读人信息块,M负责对信息块进行加工处理,P负责打印输出信息块。若提供:①一个缓冲区,可放置K个信息块;②两个缓冲区,每个缓冲区可放置K个信息块。试用信号量和PV操作分别写出以上两和中情况下三个进程正确工作的流程。
时间: 2024-03-26 13:34:08 浏览: 24
方案一:一个缓冲区可放置K个信息块
1. 初始化信号量
```
empty = K
full = 0
mutex = 1
```
2. 进程R
```
while True:
read_info() # 从输入设备读取信息块
P(empty)
P(mutex)
buffer.append(info) # 将信息块放入缓冲区
V(mutex)
V(full)
```
3. 进程M
```
while True:
P(full)
P(mutex)
info = buffer.pop() # 从缓冲区中取出信息块
V(mutex)
V(empty)
process_info(info) # 对信息块进行加工处理
P(empty)
P(mutex)
buffer.append(info) # 将加工后的信息块放回缓冲区
V(mutex)
V(full)
```
4. 进程P
```
while True:
P(full)
P(mutex)
info = buffer.pop() # 从缓冲区中取出信息块
V(mutex)
V(empty)
print_info(info) # 打印输出信息块
```
方案二:两个缓冲区,每个缓冲区可放置K个信息块
1. 初始化信号量
```
empty1 = K
full1 = 0
empty2 = K
full2 = 0
mutex1 = 1
mutex2 = 1
```
2. 进程R
```
while True:
read_info() # 从输入设备读取信息块
P(empty1)
P(mutex1)
buffer1.append(info) # 将信息块放入缓冲区1
V(mutex1)
V(full1)
```
3. 进程M
```
while True:
P(full1)
P(mutex1)
info = buffer1.pop() # 从缓冲区1中取出信息块
V(mutex1)
V(empty1)
process_info(info) # 对信息块进行加工处理
P(empty2)
P(mutex2)
buffer2.append(info) # 将加工后的信息块放入缓冲区2
V(mutex2)
V(full2)
```
4. 进程P
```
while True:
P(full2)
P(mutex2)
info = buffer2.pop() # 从缓冲区2中取出信息块
V(mutex2)
V(empty2)
print_info(info) # 打印输出信息块
```