文章
67
粉丝
0
获赞
0
访问
19.5k
需要定义
sem fill = 0;(用于同步消费者)
sem empty = k;(k个缓冲区)
sem mutex = 1;(对缓冲队列及下标互斥访问)
2.
void prod(){
while(true){
P(empty)//等待有空位
P(mutex)//互斥访问
fill()//填数据
V(mutex)
V(fill)
}
}
3.
void cons(){
while(true){
P(fill)//等待有数据
P(mutex)//互斥访问
extract()//取数据
V(mutex)
V(empty)//通知有空位
process()//处理数据
}
}
评分及理由
(1)得分及理由(满分4分)
学生定义了三个信号量:fill(应为full)、empty和mutex。其中empty初始值为k正确,full初始值为0正确,但缺少了缓冲区互斥信号量数组和指针互斥信号量。学生只使用了一个mutex信号量来保护整个缓冲区队列,这会导致并发性能下降且不符合题目要求的按编号循环访问规则。信号量定义不完整,扣2分。得2分。
(2)得分及理由(满分2分)
生产者进程伪代码中:
扣1分,得1分。
(3)得分及理由(满分2分)
消费者进程伪代码中:
扣1分,得1分。
题目总分:2+1+1=4分
登录后发布评论
暂无评论,来抢沙发