文章
6
粉丝
0
获赞
0
访问
155
semaphore mutex = 1;
semaphore odd_count = 0;
semaphore even_count = 0;
void P1() {
while (true) {
int item = produce();
wait(mutex);
put(item);
if (item % 2 == 0) {
signal(even_count);
} else {
signal(odd_count);
}
signal(mutex);
}
}
void P2() {
while (true) {
wait(odd_count);
wait(mutex);
int item = getodd();
countodd(item);
signal(mutex);
}
}
void P3() {
while (true) {
wait(even_count);
wait(mutex);
int item = geteven();
counteven(item);
signal(mutex);
}
}
void wait(semaphore s) {}
void signal(semaphore s) {}
评分及理由
(1)信号量定义(满分2分)
得分:1分
理由:学生定义了mutex、odd_count和even_count三个信号量,其中mutex用于互斥,odd_count和even_count分别用于奇数和偶数的同步,这与标准答案中的odd和even类似。但是,缺少了empty信号量来控制缓冲区的空单元数量,这是一个重要的同步信号量,用于防止缓冲区溢出。因此扣1分。
(2)P1进程实现(满分2分)
得分:1分
理由:P1进程中,学生使用了mutex来保护缓冲区的互斥访问,并根据生...
登录后发布评论
暂无评论,来抢沙发