文章
327
粉丝
40
获赞
2
访问
39.9k
semaphore mutex_a = 1;//互斥访问A的邮箱
semaphore mutex_b = 1;//互斥访问B的邮箱
semaphore empty_a = M-x;//A邮箱中还可以放入多少封邮件
semaphore empty_b = N-y;//B邮箱中还可以放入多少封邮件
semaphore full_a = x;//A邮箱中已经有多少封邮件
semaphore full_b = y;//B邮箱中已经有多少封邮件
CoBegin
A {
while (true) {
p(full_a);
p(mutex_a);
从A的信箱中取出一个邮件;
v(mutex_a);
v(empty_a);
回答问题并提出一个新问题;
p(empty_b);
p(mutex_b);
将新邮件放入B的信箱;
v(mutex_b);
v(full_b);
}
}
B {
while (true) {
p(full_b);
p(mutex_b);
从B的信箱中取出一个邮件;
v(mutex_b);
v(empty_b);
回答问题并提出一个新问题;
p(empty_a);
p(mutex_a);
将新邮件放入A的信箱;
v(mutex_a);
v(full_a);
}
}
CoEnd
评分及理由
(1)信号量定义及初值(满分2分)
学生正确定义了所有信号量(mutex_a、mutex_b、empty_a、empty_b、full_a、full_b)并给出了正确的初值(M-x、N-y、x、y)。因此得2分。
(2)A进程同步与互斥操作(满分3.5分)
在A进程中,学生正确使用了P(full_a)和P(mutex_a)来保证邮箱不为空和互斥访问,取出邮件后正确使用V(mutex_a)...
登录后发布评论
暂无评论,来抢沙发