操作系统
2025-45
三个人一起植树,甲挖坑,乙放树苗入坑并填土,丙负责为新种树苗浇水。步骤依次为:挖树坑、放树苗、填土和浇水。现有铁锹和水桶各一个,铁锹用于挖树坑和填土,水桶用于浇水。当树坑数量小于 3 时,甲才可以挖树坑。设初始坑数为 0,铁锹、水桶均可用。定义尽可能少的信号量,用 wait() 和 signal() 操作描述植树过程中三人的同步互斥关系,并说明所用信号量的作用及其初值。
答案
semaphore position = 3; // 可挖树坑的数量
semaphore pit = 0; // 树坑数量
semaphore tree = 0; // 等浇水树苗数量
semaphore mutex = 1; // 铁锹互斥
甲:
while (1) {
wait(position);
wait(mutex);
挖坑;
signal(mutex);
signal(pit);
}
乙:
while (1) {
wait(pit);
放树苗;
signal(position);
wait(mutex);
填土;
signal(mutex);
signal(tree);
}
丙:
while (1) {
wait(tree);
浇水;
}