问题描述
请举例说明发生饥饿的生产者消费者场景。
1楼
如果正确编码的生产者-消费者问题将永远不会挨饿。
- 消费者阻塞,直到有准备好要消费的缓冲区。
- 生产者阻塞直到有空缓冲区可以生产。
- 生产者在生产后立即将缓冲区移动到就绪缓冲区队列。
- 消费者在消费后立即将缓冲区移动到空缓冲区队列。
这种安排不会导致饥饿。
但是如果你引入了一个错误,比如:
在某些情况下,消费者不会将先前消耗的缓冲区返回到空缓冲区队列并继续等待下一个准备好消耗的就绪缓冲区。
或者生产者在某些情况下没有将生产的缓冲区返回到就绪缓冲区队列并继续等待空缓冲区生产。
那么最终这种情况会导致饥饿。
这种“在持有缓冲区时等待”的情况会导致饥饿。