文章

14

粉丝

0

获赞

0

访问

1.2k

头像
2009年(408)计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2026年4月12日 16:06
阅读数 53

Semophore mutex = 1; // 互斥锁

Semophore empty = N; // 空位置

Semophore odd = 0; // 记录奇数个数

Semophore even = 0; // 记录偶数个数


P1{

   while(1){
       int num = pruduce(); // 生成数据
       p(empty); // 检测缓冲区是否有空位置
       p(mutex); // 互斥访问
       put(num); 
       v(mutex); // 退出临界区
       if(num&1==0) v(even); // 放一个偶数
       else v(odd); // 放一个奇数
   }
}

P2 {

   while(1){
   
      p(odd);// 看是否有奇数
      p(mutex); //进入临界区
      getodd();
      counterodd();
      v(mutex); // 推出临界区
      v(empty); // 释放一个空间
   }

}

P3 {

   while(1){
   
      p(even); // 看是否有偶数
      p(mutex); // 进入临界区
      geteven();
      countereven();
      v(mutex); // 退出临界区
      v(empty); // 释放一个空间
   }

}

 


评分及理由

(1)得分及理由(满分7分)

得分:5分

理由:

  • 优点:学生答案的整体框架正确。定义了四个必要的信号量(mutex, empty, odd, even),含义与标准答案一致。P1、P2、P3三个进程的同步与互斥逻辑基本正确:P1先检查空位(empty),再互斥访问缓冲区(mutex),放入数据后根据奇偶性通知对应消费者(V(odd)或V(even))。P2和P3先等待对应奇偶信号(P(odd)/P(even)),再互斥访问缓冲区,取出数据并统计,最后释放空位(V(empty...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发