文章
449
粉丝
0
获赞
0
访问
80.1k
semaphore empty = N; //缓冲区可用单元数量
semaphore odd = 0, even = 0; //奇数和偶数的数量
semaphore mutex = 1; //互斥信号量
p1(){
int x = product();
p(empty);
p(mutex);
if(x % 2 == 1) v(odd);
else v(even)
put(x);
v(mutex);
}
p2(){
p(odd);
p(mutex);
getodd();
v(mutex);
v(empty);
countodd();
}
p3(){
p(even);
p(mutex);
geteven();
v(mutex);
v(empty);
counteven();
}
评分及理由
(1)信号量定义得分及理由(满分1分)
得分:1分。理由:学生正确定义了四个信号量(empty、odd、even、mutex),含义与标准答案一致,完全正确。
(2)P1进程实现得分及理由(满分3分)
得分:2分。理由:存在一个逻辑错误。在P1中,学生将V(odd)和V(even)操作放在了put(x)之前,这会导致消费者进程可能在数据还未放入缓冲区时就被唤醒,造成同步错误。正确的顺序应该是先put(x)再根据奇偶性发信号。此外,product()拼写错误应为produce(),但拼写错误不扣分。
(3)P2/P3进程实现得分及理由(满分3分)
得分:3分。理由:P2和P3的实现逻辑完全正确,包括信号量的P/V操作顺序、互斥锁的使用以及最后的计数操作,与标准答案一致。
题目总分:1+2+3=6分
登录后发布评论
暂无评论,来抢沙发