文章
63
粉丝
0
获赞
0
访问
3.2k
semaphore Aempty = 0; semaphore Bempty = 0; semaphore Afull = M; semaphore Bfull = N;
Aempty为信箱A的初始邮件数;Bempty为信箱B的初始邮件数;Afull为信箱A的初始剩余邮件数;Bfull为信箱B的初始剩余邮件数
A{
while(true){
p(Aempty);
//从A中的信箱中取一个邮件
v(Afull);
//回答问题并提出一个新问题
p(Bfull);
//将新邮件放入B的信箱
v(Bempty);
}
}
B{
while(true){
p(Bempty);
//从B中的信箱中取一个邮件
v(Bfull);
//回答问题并提出一个新问题
p(Afull);
//将新邮件放入A的信箱
v(Aempty);
}
}
评分及理由
(1)信号量定义及初值(满分2分)
得分:0分
理由:学生定义了4个信号量,但初值设置完全错误。Aempty和Bempty初值应为x和y(表示初始邮件数),但学生设为0;Afull和Bfull初值应为M-x和N-y(表示剩余容量),但学生设为M和N。信号量含义描述也存在混淆。
(2)互斥操作(满分2分)
得分:0分
理由:学生完全没有定义和使用互斥信号量,无法保证对信箱操作的互斥访问,这是一个严重的逻辑错误。
(3)同步操作(满分5分)
得分:1分
理由:学生基本理解了同步逻辑框架(P操作在操作前,V操作在操作后),但具体实现存在严重问题:①信号量初值错误导致同步逻辑错误;②缺少互斥保护;③取邮件和放邮件的同步信号量使用顺序与标准答案思路不符。只能给予基本思路分。
题目总分:0+0+1=1分
登录后发布评论
暂无评论,来抢沙发