文章

67

粉丝

0

获赞

0

访问

19.5k

头像
2025 年 10 月第 1 次 408 月考试卷 - 第45题回答
操作系统
发布于2025年10月20日 21:10
阅读数 186

需要定义

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分)

生产者进程伪代码中:

  • 正确使用了P(empty)和V(fill)
  • 但缺少指针操作和缓冲区编号管理
  • 没有体现按编号递增循环写入的规则
  • fill()操作过于简单,没有具体的缓冲区操作流程
  • mutex使用位置不当,应该保护具体的缓冲区而非整个队列

扣1分,得1分。

(3)得分及理由(满分2分)

消费者进程伪代码中:

  • 正确使用了P(fill)和V(empty)
  • 但同样缺少指针操作和缓冲区编号管理
  • 没有体现按编号递增循环读取的规则
  • extract()操作过于简单
  • mutex使用位置不当
  • process()放在V(mutex)之后是正确的

扣1分,得1分。

题目总分:2+1+1=4分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发