文章

24

粉丝

253

获赞

1

访问

14.6k

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

semaphore mutex=1;
semaphore full=0;
semaphore empty=N;
p1(){
 
while(1){
  x=produce();
   p(empty);
   p(mutex); 
     put();
    v(mutex);
    v(full);


   

 }
}
p2(){
  while(1){
   p(full);
    p(mutex);
   int k=getodd();
   if(k%2!=0){
     countodd();
     v(mutex);
     v(empty);
  
    }
   

  }

}
p3(){
  while(1){
   p(full);
    p(mutex);
   int m=geteven();
    if(m%2==0){
      geteven();
       v(mutex);
      v(empty);

       
    }
  
  
   }

}







 


评分及理由

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

得分:0.5分

理由:学生定义了mutex、full、empty三个信号量,缺少区分奇偶数的同步信号量。虽然full可以用于生产者消费者同步,但无法区分奇偶数,这会导致P2和P3无法正确获取对应类型的数据。

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

得分:1.5分

理由:P1的生产者逻辑基本正确,有empty和mutex的正确使用。但缺少对数据奇偶性的判断和相应的信号量操作(V(odd)或V(even)),这会导致后续消费者无法区分数据类型。

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

得分:1分

理由:存在严重逻辑错误:①在获取数据后先判断奇偶性再释放互斥锁,这违背了互斥原则;②getodd()操作应该在判断奇偶性之前完成;③countodd()不应该在互斥区内执行;④缺少对获取数据是否为奇数的正确判断逻辑。

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

得分:0.5分

理由:存在严重逻辑错误:①调用了两次geteven()...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发