文章
397
粉丝
40
获赞
2
访问
88.2k
semaphore mutex_a = 1;//互斥访问A的邮箱
semaphore mutex_b = 1;//互斥访问B的邮箱
semaphore empty_a = M-x;//A邮箱中还可以放入多少封邮件
semaphore empty_a = N-y;//B邮箱中还可以放入多少封邮件
CoBegin
A {
while (true) {
p(mutex_a);
从A的信箱中取出一个邮件;
v(empty_a);
v(mutex_a);
回答问题并提出一个新问题;
p(mutex_b);
将新邮件放入B的信箱;
p(empty_b);
v(mutex_b);
}
}
B {
while (true) {
p(mutex_b);
从B的信箱中取出一个邮件;
v(empty_b);
v(mutex_b);
回答问题并提出一个新问题;
p(mutex_a);
将新邮件放入A的信箱;
p(empty_a);
v(mutex_a);
}
}
CoEnd
评分及理由
(1)信号量定义及初值(满分2分)
得分:1分
理由:学生定义了互斥信号量mutex_a和mutex_b,初值正确(1分)。但同步信号量定义有误:empty_a和empty_b的初值定义正确(M-x和N-y),但缺少了full_a和full_b信号量(用于表示信箱中现有邮件数量),且empty_a被重复定义(第二次写成了empty_a,应为empty_b)。因此扣1分。
(2)A进程同步与互斥操作(满分3.5分)
得分:1分
理由:互斥操作部分正确(P(mutex_a)和V(mutex_a)包围取邮件操作,P(mutex_b)和V(mutex_b)包围放邮件操作)(1分)。但同步操作错误:取邮件前缺少P(full_a)操作(判断信箱是否有邮件),放邮件前P(empt...
登录后发布评论
暂无评论,来抢沙发