文章
16
粉丝
42
获赞
14
访问
4.9k
1. 信号量定义及初值
信号量名称 作用 初值
empty 同步信号量,记录可用于放树苗的空树坑数量(控制乙在甲挖好坑后操作)。 0
filled 同步信号量,记录已放好树苗等待填土的树坑数量(控制乙放苗后甲、丙的操作)。 0
shovel 互斥信号量,保证铁锹在“挖坑”和“填土”操作间的互斥使用(甲、乙共用)。 1
bucket 互斥信号量,保证水桶在浇水操作中被丙独占使用。 1
count 同步信号量,控制甲挖坑的数量不超过2(树坑数量<3时甲才能挖)。 2
2. 三人操作的同步互斥描述(伪代码)
甲(挖坑):
while (true) {
wait(count); // 检查树坑数是否<3,是则占用1个“挖坑名额”
wait(shovel); // 申请铁锹,互斥使用
挖树坑; // 临界区操作:使用铁锹挖坑
signal(shovel); // 释放铁锹,允许乙使用
signal(empty); // 空树坑数量+1,通知乙可以放树苗
}
乙(放树苗+填土):
while (true) {
wait(empty); // 等待甲挖好空树坑(empty≥1)
放树苗入坑; // 无需工具,直接操作
wait(shovel); // 申请铁锹,准备填土
填土;  ...
登录后发布评论
暂无评论,来抢沙发