文章
13
粉丝
0
获赞
0
访问
1.2k
semaphore odd = 0;
semaphore even = 0;
semaphore empty = N;
semaphore mutex = 1;
P1(){
while(True){
x = produce();
P(empty);
P(mutex);
put();
V(mutex);
if(x%2==0)
V(even)
else
V(odd)
}
}
P2(){
while(True){
P(odd);
P(mutex);
getodd();
V(mutex);
V(empty);
countodd();
}
}
P3(){
while(True){
P(even);
P(mutex);
geteven();
V(mutex);
V(empty);
counteven();
}
}
评分及理由
(1)信号量定义(满分1分)
得分:1分。理由:学生正确定义了四个信号量(odd、even、empty、mutex),含义与标准答案一致,且初始值正确(odd=0, even=0, empty=N, mutex=1)。
(2)P1进程伪代码(满分2分)
得分:2分。理由:P1的流程正确,包括生成数据、申请空单元(P(empty))、申请互斥锁(P(mutex))、放入数据、释放互斥锁(V(mutex))、并根据奇偶性释放对应信号量(V(odd)或V(even))。学生额外添加了while循环,但题目未明确要求循环,且不影响同步逻辑,不扣分。
(3)P2进程伪代码(满分2分)
得分:2分。理由:P2的流程正确,包括等待奇数信号(P(odd))、申请互斥锁(P(mutex))、取奇数、释放互斥锁(V(mutex))、释放空单元(V(empty))、统计奇数。while循环同样不扣分。
(4)P3进程伪代码(满分2分)
得分:2分。理由:P3的流程正确,包括等待偶数信号(P(even))、申请互斥锁(P(mutex))、取偶数、释放互斥锁(V(mutex))、释放空单元(V(empty))、统计偶数。wh...
登录后发布评论
暂无评论,来抢沙发