文章

14

粉丝

0

获赞

0

访问

503

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

mutex=1;empty=N;full=0;even=0;odd=0;

mutex表示互斥访问的信号量;empty表示初始缓冲区空单元数目;full表示初始缓冲区数的个数;even表示初始缓冲区偶数的个数;odd表示初始缓冲区奇数的个数;


P1(){
while(true){
P(empty);
int num = produce();
P(mutex);
put();
V(mutex);
if(num%2==0){
V(even);
}else{
V(odd);
}
V(full);
}
}

P2(){
while(true){
P(full);
P(odd);
P(mutex);
getodd();
V(mutex);
V(empty);
countodd();
}
}

P3(){
while(true){
P(full);
P(even);
P(mutex);
geteven();
V(mutex);
V(empty);
counteven();
}
}




评分及理由

(1)信号量定义(满分2分)

得分:1分

理由:学生定义了mutex、empty、even、odd四个必要的信号量,但额外定义了full信号量。虽然full信号量在生产者-消费者问题中常见,但在此题中与标准答案不一致,且可能引起同步逻辑问题。由于信号量定义基本正确但有多余定义,扣1分。

(2)同步互斥逻辑(满分4分)

得分:2分

理由:学生代码存在以下逻辑错误:
1. P1进程中V(full)的位置错误,应该在put操作前或后立即执行,但学生放在了条件判断之后,这会导致同步时序问题
2. P2和P3进程中P(full)和P(odd)/P(even)的顺序错误,可能导致死锁或数据不一致
3. 缺少对缓冲区空单元的准确控制,P2和P3中只V(empty)一次,但P1中P(empty)一次,逻辑不匹配
这些逻辑错误严重影响程序正确性,扣2分

(3)代码完整性(满分1分)

得分:1分

理由:学生代码结构完整,包含了所有必要的进程和基本操作,代码格式规范。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发