文章

101

粉丝

0

获赞

1

访问

30.2k

头像
2015年计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年11月3日 20:47
阅读数 14

Semaphore emptyA=0;//信箱是否为空

Semaphore emptyB=0;

Semaphore muteA=1;

Semaphore muteB=1;

Semaphore fullA=M;//信箱内是否满

Semaphore fullB=N;

 

CoBegin

A{

while(true){

p(emptyA);

v(fullA);

p(muteA);

取邮件;

v(muteA);

回答并提出问题;

p(fullB);

p(muteB);

放进B信箱;

v(emptyB);

v(muteB);

}

B{

while(true){

p(emptyB);

p(muteB);

取邮件;

v(muteB);

回答问题并提出新问题;

p(fullA);

p(muteA);

将习邮件放入A信箱;

v(emptyA);

v(muteA);

}


评分及理由

(1)信号量定义及初值(满分2分)

得分:0分

理由:学生定义的信号量含义和初值存在严重错误。emptyA和emptyB初值为0,但实际应表示信箱空位数量,初值应为Empty_A=M-x和Empty_B=N-y;fullA和fullB初值为M和N,但实际应表示信箱中邮件数量,初值应为Full_A=x和Full_B=y。信号量含义与标准答案完全不符。

(2)A进程同步互斥操作(满分3.5分)

得分:0.5分

理由:A进程中使用了互斥信号量muteA保护取邮件操作,这是正确的(得0.5分)。但同步逻辑完全错误:在取邮件前应该P(Full_A)检查是否有邮件,而不是P(emptyA);应该V(Empty_A)释放空位,而不是V(fullA)。放入B信箱时的同步操作也完全错误。

(3)B进程同步互斥操作(满分3.5分)

得分:1分

理由:B进程中使用了互斥信号量muteB保护取邮件操作(得0.5分),放入A信箱时也使用了互斥信号量muteA(得0.5分)。但同步逻辑同样完全错误:取邮件前应该P(Full_B)而不是P(emptyB);放入A信箱时应该P(Empty_A)检查空位而不是P(fu...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发