更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
有两个生产者 a、b 不断向仓库存放产品,由销售者 c 取走仓库中产品(仓库初态为空, 仓库容量为无限大)。请写出通过 P、V 操作实现 3 个进程间的同步和互斥的框图或伪程序,并写出信号量的初值和意义。 答:定义信号量: 互斥信号量mutex:初值为1 空位信号量empty:初值为缓冲区容量N 满位信号量full:初值为0 定义缓冲区: 缓冲区buffer:长度为N 生产者写入数据指针in:初值为0 消费者读取数据指针out:初值为0 定义进程: 生产者A: 重复执行以下步骤: 生产一个产品item P(  ) P(  ) buffer[in] := item in := (in + 1) mod N V(  ) V(  ) 生产者B: 重复执行以下步骤: 生产一个产品item P(  ) P(  ) buffer[in] := item in := (in + 1) mod N V(  ) V(  ) 消费者C: 重复执行以下步骤: P(  ) P(  ) item := buffer[out] out := (out + 1) mod N V(  ) V(  ) 消费产品item mutex 是互斥信号量,它的初值为 1,用于保证在临界区中只有一个进程或线程能够访问共享资源。 empty 是空位信号量,它的初值为缓冲区容量 N,用于记录缓冲区中空闲的位置数,当该值为 0 时,生产者需要等待直到消费者取走了一些产品以后才能继续往缓冲区中写入数据,从而实现同步。 full 是满位信号量,它的初值为 0,用于记录缓冲区中已有产品的数量,当该值为 0 时,消费者需要等待直到生产者写入了新的产品以后才能继续从缓冲区中读取数据,从而实现同步。