文章

14

粉丝

0

获赞

0

访问

1.2k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第45题回答
操作系统
发布于2025年8月18日 12:30
阅读数 70

//所需信号量及锁变量题干已提供,不重复写出

void consumerC1(){

while (true){

if(fullB>0){

P(mutex);fullB--;

V(emptyB);

V(mutex);

int wait=2;

while(wait-->0);

}

}

}

void consumerC1(){

while (true){

if(fullA>0){

P(mutex);fullA--;

V(emptyA);

V(mutex);

int wait=1;

while(wait-->0);

}

}

}

void produceP2(){

while(true){

if emptyB<2{

int i = 1;

while(i-->0);//等待一时间单位

P(mutex);

p(emptyB);

fullB++;

V(mutex);

}

}

}

 

void produceP1(){

while(true){

if emptyA<2{

int i = 2;

while(i-->0);//等待两时间单位

P(mutex);

p(emptyA);

fullA++;

V(mutex);

}

}

}

耗时7单位


评分及理由

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

得分:2分

理由:

  • 学生代码中存在多个逻辑错误:
  • 1. C1和C2的消费逻辑错误:C1应该消费A型产品,但学生代码中检查的是fullB;C2应该消费B型产品,但学生代码中检查的是fullA。这是严重的逻辑错误。
  • 2. 生产者代码中信号量使用顺序错误:应该先P(emptyX)再P(mutex),但学生代码中顺序相反。
  • 3. 生产者代码中缺少V(fullX)操作。
  • 4. 消费者代码中缺少P(fullX)操作。
  • 5. 代码中使用了if条件判断而不是信号量机制,这是错误的同步方式。
  • 部分正确点:使用了mutex保护临界区,基本结构框架正确。...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发