文章
58
粉丝
253
获赞
1
访问
22.1k
process P1() {
while (true) {
// 1. 生成一个正整数
int data = produce();
// 2. 申请空单元:无空单元则阻塞
P(empty);
// 3. 申请互斥访问缓冲区:避免与P2/P3同时操作
P(mutex);
// 4. 将数据放入缓冲区的空单元(具体位置需结合缓冲区存储逻辑,如数组+指针)
put(data);
// 5. 释放缓冲区互斥权
V(mutex);
// 6. 根据数据奇偶性,唤醒对应取数进程
if (data % 2 == 1) {
V(odd); // 有新奇数,唤醒P2
} else {
V(even); // 有新偶数,唤醒P3
}
}
}
取奇数进程 P2(取出奇数并统计)
process P2() {
while (true) {
// 1. 申请奇数:无奇数则阻塞
P(odd);
// 2. 申请互斥访问缓冲区
P(mutex);
// 3. 从缓冲区取出一个奇数
int data = getodd();
// 4. 统计奇数个数
countodd();
// 5. 释放缓冲区互斥权
V(mutex);
// 6. 释放一个空单元,唤醒P1(缓冲区多一个空位可生产)
V(empty);
}
}
取偶数进程 P3(取出偶数并统计)
process P3() {
while (true) {
// 1. 申请偶数:无偶数则阻塞
P(even);
// 2. 申请互斥访问缓冲区
P(mutex);
...
登录后发布评论
暂无评论,来抢沙发