文章

5

粉丝

0

获赞

0

访问

344

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

semaphore mutex = 1; // 互斥信号量

semaphore empty = N;

semaphore full = 0;

semaphore odd = 0;

semaphore even = 0; 

P1{

while(1){

int num = produce();

if (num %2==0){

v(even);

}else{

v(odd);

}

// 访问临界区

p(full);

p(mutex);

put(num);

v(mutex);

v(full);

}

}



P2{

while(1){

p(odd);

p(mutex);

getodd();

countodd()++;

v(mutex);

}

}



P2{

while(1){

p(even);

p(mutex);

geteven();

counteven()++;

v(mutex);

}

}

 


评分及理由

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

得分:1分

理由:学生定义了mutex、empty、odd、even信号量,与标准答案一致。虽然额外定义了full信号量,但根据"禁止加分"原则,不扣分也不加分。

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

得分:0分

理由:存在严重逻辑错误:①先V(odd)/V(even)后执行put操作,导致消费者可能在数据还未放入缓冲区时就收到信号;②P(full)和V(full)使用错误,full信号量应该用于控制缓冲区非空,但这里使用方式完全错误;③缺少P(empty)操作来检查缓冲区空位;④V(full)应该在put之后,但这里V(full)的位置和意义都不对。

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

得分:1分

理由:①P2和P3的代码结构基本正确,使用了正确的信号量等待和互斥保护;②但存在严重错误:缺少V(empty)操作来释放缓冲区空间;③代码中有"P2{"重复定义的笔误;④countodd()++和counteven()++的语法错误,应该是函数调用。

题目...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发