文章
79
粉丝
0
获赞
0
访问
3.4k
semaphore even=0, odd=0, mutex=1, N_empty=N;
P1(){
while(1){ //循环
x=produce();
P(N_empty);
P(mutex);
放入N中某个缓冲区单元;
V(mutex);
if(x%2==0) V(even);
else V(odd);
}
}
P2(){
while(1){ //循环
P(odd);
P(mutex)
getodd();
countodd();
V(mutex);
V(N_empty);
}
}
P3(){
while(1){ //循环
P(even);
P(mutex)
geteven();
counteven();
V(mutex);
V(N_empty);
}
}
评分及理由
(1)信号量定义得分及理由(满分1分)
得分:1分
理由:学生定义了四个信号量even、odd、mutex、N_empty,与标准答案完全一致,信号量含义正确。N_empty对应empty,命名不同但不影响功能。
(2)P1进程实现得分及理由(满分2分)
得分:2分
理由:P1进程逻辑完整正确,包含生产数据、申请空单元、申请互斥锁、放入缓冲区、释放互斥锁、根据奇偶性通知相应消费者。添加了while循环在实际应用中更合理。
(3)P2进程实现得分及理由(满分2分)
得分:1分
理由:存在逻辑错误。countodd()函数应该在释放互斥锁之后执行,因为统计操作不需要互斥保护,放在互斥区内会降低并发效率。虽然功能上能实现,但设计不合理。
(4)P3进程实现得分及理由(满分2分)
得分:1分
理由:存在与P2相同的逻辑错误。counteven()函数应该在释放互斥锁之后执行,放在互斥区内会不必要的延长临界区时间,影响...
登录后发布评论
暂无评论,来抢沙发