文章
60
粉丝
6
获赞
0
访问
6.5k
(1)信号量定义
semaphore mutex_well = 1; // 水井互斥(一次仅一个桶取水)
semaphore mutex_tank = 1; // 水缸操作互斥(入水/取水不可同时进行)
semaphore empty = 10; // 水缸剩余空位(初始可容纳10桶)
semaphore full = 0; // 水缸当前水量(初始为0)
semaphore bucket = 3; // 可用水桶数量(总共有3个)
(2)小和尚打水入缸算法
void young_monk() {
while (true) {
P(empty); // 等待水缸有空位
P(bucket); // 申请一个水桶
P(mutex_well); // 占用水井
从井中打水(); // 临界区:取水操作
V(mutex_well); // 释放水井
P(mutex_tank); // 申请操作水缸
将水倒入缸中(); // 临界区:入水操作
V(mutex_tank); // 释放水缸
V(bucket); // 归还水桶
V(full); // 通知水量增加
}
}
(3)老和尚从缸取水算法
void old_monk() {
while (true) {
P(full); // 等待水缸有水
P(bucket); // 申请一个水桶
P(mutex_tank); // 申请操作水缸
从缸中取水(); // 临界区:取水操作
V(mutex_tank); // 释放水缸
V(bucket); // 归还水桶
V(em...
登录后发布评论
暂无评论,来抢沙发