文章
635
粉丝
0
获赞
2
访问
221.1k

评分及理由
(1)得分及理由(满分2分)
得分:0分
理由:学生定义的信号量只有mutex和empty,且初值设置错误。
标准答案要求至少定义4个信号量:mutex1(消费者连续取10件的互斥)、mutex2(单次访问缓冲区互斥)、empty(空位数,初值1000)、full(产品数,初值0)。
学生把empty初值写成1000还可以理解,但完全缺少full和消费者连续取10件的控制信号量mutex1,且mutex未区分单次互斥和连续10次互斥。信号量含义和初值均不正确,扣2分。
(2)得分及理由(满分3分)
得分:0分
理由:生产者与消费者之间的同步操作完全错误。
生产者中执行P(empty)后放入产品,但没有V(full)来增加产品数量;消费者中执行V(empty)而不是先P(full)判断是否有产品,逻辑颠倒。
标准答案要求生产者:P(empty); P(mutex2); 放入; V(mutex2); V(full);
消费者:P(full); P(mutex2); 取出; V(mutex2); V(empty);
学生代码中完全没有full信号量,导致消费者无法正确等待产品,生产者也无法通知消费者,同步关系完全缺失,扣3分。
(3)得分及理由(满分3分)
得分:0分
理由:消费者连续取10件产品的控制逻辑错误。
学生代码在消费者中使用V(empty),语义错误;for循环中只调用get(),没有对每次取产品进行P(full)判断和V(empty)操作;且循环次数写成i < 10虽然次数正确(10次),但整体没有实现“一个消费者连续取出10件后其他消费者才可以取”的互斥要求。标准答案需要mutex1来保证消费者连续取10件的原子性,学生完全缺失该信号量及对应操作,扣3分。
题目总分:0+0+0=0分
登录后发布评论
暂无评论,来抢沙发