【问题标题】:How starvation occurs in producer consumer problem生产者消费者问题中的饥饿如何发生
【发布时间】:2019-07-06 21:24:59
【问题描述】:

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

【问题讨论】:

  • 在 Stack Overflow 上,我们可以用一个例子来演示答案。但是示例不能是答案的唯一目的。为什么不取网上的例子呢?如果您对某些现有的示例不了解,可以专门询问。
  • 我没有从谷歌找到任何例子,这就是我在这里发布的原因。

标签: java multithreading producer-consumer


【解决方案1】:

如果编码正确,生产者-消费者问题总是不会出现饥饿问题。

  • 消费者阻塞,直到有准备好使用的缓冲区。
  • 生产者阻塞直到有空的缓冲区可以生产。
  • 生产者在生产后立即将缓冲区移动到就绪缓冲区队列。
  • 消费者在消费后立即将缓冲区移动到空缓冲区队列。

这种安排不会导致饥饿。

但是如果你引入了这样的错误:

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

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

  • 那么最终这种情况会导致饥饿。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2011-07-27
    相关资源
    最近更新 更多