2025 408 真题解答
🧑💻 作者: 一可爱小白兔
📦 版本: 1.0.0
📄 字数(字): 0
⏳ 时长(min): 0
⏱️ 更新于: 2026-01-08
问题描述
三个人一起植树,甲挖坑,乙放树苗入坑并填土,丙负责为新种树苗浇水。步骤依次为:挖树坑,放树苗,填土和浇水。 现在有铁锹和水桶各一个,铁锹用于挖树坑,填土。水桶用于浇水。当树坑数量小于 3 时,甲才可以挖树坑。
设初始坑 = 0,铁锹水桶均可用,定义尽可能少的信号量,用 wait() 和 signal() 操作描述植树过程中三人的同步互斥关系,并说明所用信号量的作用及其初值。
参考答案
c++
semaphore pit = 3; // 同步信号量,表示可挖的树坑数量,初值为3
semaphore full = 0; // 同步信号量,表示可用的树坑数量,初值为0
semaphore water = 0; // 同步信号量,表示已浇水的树苗数量,初值为0
semaphore mutex = 1; // 互斥信号量,表示对铁锹的互斥访问,初值为1
cobegin
甲(){
while(1) {
wait(pit); // 可挖的树坑数量-1
wait(mutex);
挖树坑;
singnal(mutex);
singnal(full); // 可用的树坑数量+1,通知乙可以放树苗和填土
}
}
乙(){
while(1) {
wait(full); // 可用的树坑数量-1
wait(mutex);
放树苗和填土;
singnal(mutex);
singnal(pit); // 可挖的树坑数量+1,通知甲可以挖树坑
singnal(water); // 通知丙可以浇水
}
}
丙(){
while(1) {
wait(water);
浇水;
}
}
coend1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32