文章
9
粉丝
0
获赞
0
访问
5.6k
(1)mutex[k];//单个缓冲区不能同时被写入和读取
block_empty[];//
block_full[];//
(2)P{
while(!block_empty[i]{
p(mutex[i]);
//将数据放入缓冲区
v(block_full[i]);
v(mutex[i]);
}
}
(3)C{
while(!block_full[i]{
p(mutex[i]);
//从缓冲区取出数据
v(block_empty[i]);
v(mutex[i]);
}
}
评分及理由
(1)得分及理由(满分4分)
学生只定义了一个互斥信号量数组mutex[k],但缺少关键的空缓冲区信号量(empty)、满缓冲区信号量(full)和指针互斥信号量(ptr_mutex)。定义的block_empty和block_full数组含义不明确,且未说明初始值。信号量定义不完整,无法正确实现同步互斥机制。扣4分。
得分:0分
(2)得分及理由(满分2分)
学生伪代码存在多处逻辑错误:未按环形缓冲区递增顺序写入;使用i作为固定索引而非动态指针;缺少对空缓冲区的申请操作;信号量使用错误(block_empty[i]作为条件判断而非信号量操作);缺少指针更新机制。代码无法正确实现生产者功能。扣2分。
得分:0分
(3)得分及理由(满分2分)
学生伪代码存在类似问题:未按环形缓冲区递增顺序读取;使用固定索引i;缺少对满缓冲区的申请操作;信号量使用错误;缺少指针更新机制。代码无法正确实现消费者功能。扣2分。
得分:0分
题...
登录后发布评论
暂无评论,来抢沙发