文章

54

粉丝

21

获赞

0

访问

4.1k

头像
2009年计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年10月26日 15:34
阅读数 34

semaphore buffet=N;  //剩余可用单元数

semaphore even=0;//缓冲区中剩余偶数个数

semaphore odd=0;//缓冲区中剩余奇数个数

P1{while{

P(buffet);

if(produce()%2==0){

V(even);

}else{

V(odd);

}

put();

}

}

P2{while{

P(odd);

取出一个奇数;

countodd();

V(buffet);

}

}

P3{while{

P(even);

从缓冲区中取出一个偶数;

counteven();

V(buffet);

}

}


评分及理由

(1)信号量定义得分及理由(满分2分)

得分:1分

理由:学生定义了buffet(应为empty)、even、odd三个信号量,基本覆盖了同步需求,但缺少互斥信号量mutex。buffet拼写错误但不影响理解。由于缺少关键互斥信号量,扣1分。

(2)P1进程实现得分及理由(满分2分)

得分:0分

理由:存在严重逻辑错误:①先进行P(buffet)后直接判断produce()的奇偶性,但此时还未实际将数据放入缓冲区;②V(even)/V(odd)操作在put()之前执行,这会导致消费者可能在数据还未放入缓冲区时就被唤醒;③缺少互斥保护。这些都属于严重逻辑错误。

(3)P2/P3进程实现得分及理由(满分3分)

得分:1分

理由:P2和P3的基本同步逻辑正确(通过P(odd)/P(even)等待相应数据,通过V(buffet)释放空间),但存在以下问题:①缺少互斥保护;②"取出一个奇数/偶数"的操作没有明确的缓冲区访问机制;③计数操作countodd()/counteven()的位置基本合理。由于缺少互斥保护这一关键问题,扣2分。

题目总分:1+0+1=2分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发