文章
36
粉丝
0
获赞
0
访问
3.7k
// 定义信号量:
// mutex: 互斥信号量,保证对缓冲区的互斥访问,初始值为1
// empty: 表示缓冲区空单元数量,初始值为N
// odd: 表示缓冲区中奇数数量,初始值为0
// even: 表示缓冲区中偶数数量,初始值为0
semaphore mutex = 1, empty = N, odd = 0, even = 0;
P1() {
while(1) {
x = produce(); // 生成一个正整数
P(empty); // 申请一个空缓冲区单元(若无空单元则阻塞)
P(mutex); // 申请进入临界区(互斥访问缓冲区)
put(); // 将x放入缓冲区
V(mutex); // 离开临界区
if (x % 2 == 1) // 若x为奇数
V(odd); // 释放一个奇数资源(通知P2)
else // 若x为偶数
V(even); // 释放一个偶数资源(通知P3)
}
}
P2() {
while(1) {
P(odd); // 申请一个奇数资源(若无奇数则阻塞)
P(mutex); // 申请进入临界区
getodd(); // 从缓冲区取出一个奇数
V(mutex); // 离开临界区
V(empty); // 释放一个空缓冲区单元
countodd(); // 统计奇数个数
}
}
P3() {
while(1) {
P(even...
登录后发布评论
暂无评论,来抢沙发