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

问题描述 投票:-4回答:1

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

java multithreading producer-consumer
1个回答
0
投票

如果正确编码的生产者 - 消费者问题总是免于饥饿。

  • 消费者阻塞直到有准备好的缓冲消耗。
  • 生产者阻塞,直到产生空的缓冲区。
  • 生成器立即生成移动缓冲区到就绪缓冲区队列。
  • 消费者立即消耗移动缓冲区到空缓冲区队列。

这种安排不会导致饥饿。

但是如果你引入了一个类似的bug:

  • 某些条件下的消费者没有将先前消耗的缓冲区返回到空缓冲区队列并继续等待准备好消耗的下一个就绪缓冲区。
  • 或者生产者在某些条件下没有将生成的缓冲区返回到就绪缓冲区队列并继续等待空缓冲区生成。
  • 那么最终这种情况会导致饥饿。

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

© www.soinside.com 2019 - 2024. All rights reserved.