生产者消费者问题中饥饿如何发生

时间:2019-02-13 06:00:03

标签: java multithreading producer-consumer

请举例说明发生饥饿的生产者消费者情形。

1 个答案:

答案 0 :(得分:0)

如果正确编码的生产者-消费者问题始终是无饥饿的。

  • 阻塞消费直到有可用的缓冲区可用。
  • 生产者阻塞,直到有空缓冲区要产生为止。
  • 立即将缓冲区移动到就绪缓冲区队列后的生产者。
  • 立即将缓冲区移动到空缓冲区队列中的消费者。

这种安排不会导致饥饿。

但是,如果您引入如下错误:

  • 在某些情况下,消费者不会将先前消耗的缓冲区返回空缓冲区队列,而是继续等待下一个准备使用的缓冲区准备好消耗。

  • 或者生产者在某些情况下没有将生产的缓冲区返回到就绪缓冲区队列,而是继续等待空缓冲区产生。

  • 然后最终这种情况将导致饥饿。

这种“等待缓冲区等待”的情况可能导致饥饿。