Appearance
题目
有 A、B 两人通过信箱进行辩论:
- 每个人都从自己的信箱中取得对方的问题,将答案和向对方提出的新问题组成一个邮件放入对方的信箱中
- 假设 A 的信箱最多放 M 个邮件,B 的信箱最多放 N 个邮件
- 初始时 A 的信箱中有 x 个邮件(0 < x < M),B 的信箱中有 y 个邮件(0 < y < N)
- 辩论者每取出一个邮件,邮件数减 1
- A、B 两人的操作过程描述如下:
c
A {
while (true) {
从 A 的信箱中取出一个邮件;
回答问题并提出一个新问题;
将新邮件放入 B 的信箱;
}
}
B {
while (true) {
从 B 的信箱中取出一个邮件;
回答问题并提出一个新问题;
将新邮件放入 A 的信箱;
}
}约束:信箱不为空时,辩论者才能从信箱中取邮件,否则等待;信箱不满时,辩论者才能将新邮件放入信箱,否则等待。
请添加必要的信号量和 P、V(或 wait、signal)操作,以实现上述过程的同步。要求写出完整的过程,并说明信号量的含义和初值。