文章
29
粉丝
0
获赞
0
访问
1.1k
// 初始化信号量
semaphore mutex = 1;
semaphore empty = N;
semaphore odd = 0;
semaphore even = 0;
// 进程 P1
process P1 {
while (true) {
int num = produce(); // 生成一个正整数
P(empty); // 等待空单元
P(mutex); // 获取缓冲区互斥锁
put(num); // 将数字放入缓冲区
V(mutex); // 释放缓冲区互斥锁
if (num % 2 == 1) {
V(odd); // 增加奇数计数,唤醒等待奇数的进程
} else {
V(even); // 增加偶数计数,唤醒等待偶数的进程
}
}
}
// 进程 P2
process P2 {
while (true) {
P(odd); // 等待缓冲区中有奇数
P(mutex); // 获取缓冲区互斥锁
int num = getodd(); // 从缓冲区取出一个奇数
countodd(); // 统计奇数个数
V(mutex); // 释放缓冲区互斥锁
V(empty); // 增加空单元计数,唤醒等待空单元的进程
}
}
// 进程 P3
process P3 {
while (true) {
P(even); // 等待缓冲区中有偶数
P(mutex); // 获取缓冲区互斥锁
int nu...
登录后发布评论
暂无评论,来抢沙发