文章

17

粉丝

0

获赞

0

访问

248

头像
2025 年 5 月第 1 次 408 月考试卷 - 第46题回答
操作系统
发布于2025年10月1日 20:15
阅读数 13

信号量名称	作用	初始值	含义解释
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. 等待水缸有水(若空则阻塞)
    ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发