文章
19
粉丝
0
获赞
0
访问
639
// 信号量定义
Semaphore mutex = 1; // 互斥访问缓冲区
Semaphore empty = N; // 空缓冲区单元数
Semaphore full = 0; // 缓冲区中的数据单元数
Semaphore odd_sem = 0; // 缓冲区中的奇数个数
Semaphore even_sem = 0; // 缓冲区中的偶数个数
// 共享变量定义
int buffer[N];
int in = 0;
int out = 0;
int odd_count = 0;
int even_count = 0;
// 进程 P1 (生产者)
Process P1 {
while (true) {
int data = produce(); // 生产一个正整数
wait(empty); // 等待直到有空单元
wait(mutex); // 互斥访问缓冲区
buffer[in] = data; // 将数据放入缓冲区
in = (in + 1) % N;
signal(mutex); // 释放缓冲区互斥锁
signal(full); // 增加数据单元数
if (data % 2 == 0) {
signal(even_sem); // 如果是偶数,增加偶数计数器
} else {
signal(odd_sem); // 如果是奇数,增加奇数计数器
}
}
}
// 进程 P2 (奇数消费者)
Process P2 {
while (true) {
wait(odd_sem); // 等待直到有奇数
wait(mutex); // 互斥访问缓冲区
int data = buffer[out]; //从缓冲区取数据
out = (out + 1) % N;
si...
登录后发布评论
暂无评论,来抢沙发