文章
27
粉丝
0
获赞
0
访问
1.8k
mutex m;
signal A = x, B = y; // 表示A信箱初始有x个邮件,B信箱初始有y个邮件
signal RA = M - x, RB = N - y; // 表示A、B信箱分别还能放多少个邮件
A {
while (TRUE) {
lock(&m);
P(A);
V(RA);
do something...
P(RB);
V(B);
unlock(&m);
}
}
B {
while (TRUE) {
lock(&m);
P(B);
V(RB);
do something...
P(RA);
V(A);
unlock(&m);
}
}
评分及理由
(1)信号量定义及初值(满分2分)
得分:1分
理由:学生定义了四个信号量A、B、RA、RB,分别对应标准答案中的Full_A、Full_B、Empty_A、Empty_B,初值设置正确。但缺少对两个信箱的互斥信号量定义,只定义了一个全局互斥锁mutex m,没有按照标准答案分别定义mutex_A和mutex_B。因此扣1分。
(2)A进程同步控制(满分3.5分)
得分:1分
理由:学生使用了P(A)和V(RA)实现取邮件的同步,P(RB)和V(B)实现放邮件的同步,同步逻辑基本正确。但存在严重逻辑错误:将整个操作序列放在同一个互斥锁内,这会导致死锁。因为当A进程执行P(RB)时,如果B信箱已满,A会阻塞,但此时互斥锁m仍被A持有,B进程无法进入临界区执行V(RB)操作。此外,缺少对信箱操作的互斥保护。因此扣2.5分...
登录后发布评论
暂无评论,来抢沙发