文章
17
粉丝
0
获赞
0
访问
248
信号量名称 作用 初始值 含义解释
empty 同步信号量(水缸空桶数) 10 表示水缸可容纳的空桶数(初始为 10,每入缸 1 桶减 1,每取水 1 桶加 1)
full 同步信号量(水缸满桶数) 0 表示水缸中可饮用的满桶数(初始为 0,每入缸 1 桶加 1,每取水 1 桶减 1)
mutex_well 互斥信号量(水井独占) 1 保证同一时间仅 1 个进程(小和尚)使用水井取水(P 占用水井,V 释放水井)
mutex_tank 互斥信号量(水缸操作) 1 保证入缸和取水不同时进行(P 占用水缸,V 释放水缸)
bucket 互斥信号量(水桶资源) 3 管理 3 个水桶的分配(P 申请 1 个桶,V 释放 1 个桶)
process 小和尚() {
repeat
P(empty); // 1. 等待水缸有空位(若满则阻塞)
P(bucket); // 2. 申请1个水桶(若无桶则阻塞)
P(mutex_well); // 3. 占用水井(防止同时取水)
// 临界区1:从水井提水(独占水井和水桶)
从井中用桶取水;
V(mutex_well); // 4. 释放水井(允许其他进程使用)
P(mutex_tank); // 5. 占用水缸(防止与取水同时进行)
// 临界区2:将水倒入水缸(独占水缸)
将水桶中的水倒入水缸;
V(mutex_tank); // 6. 释放水缸
V(bucket); // 7. 释放水桶(桶可重复使用)
V(full); // 8. 水缸满桶数+1(通知老和尚可取水)
until 任务结束; // 循环执行,直到无需提水
}
process 老和尚() {
repeat
P(full); // 1. 等待水缸有水(若空则阻塞)
...
登录后发布评论
暂无评论,来抢沙发