我有点卡在多个消费者/生产者问题上。它出现在我的讲义中,但我根本无法理解为什么单一的消费者/生产者方法行不通。
1 个消费者和 1 个生产者的典型方法如下所示:
Producer :
while(true)
emptyBuffers.P();
mutex.P();
buffer.insert(produced item);
mutex.V();
fullBuffers.V();
Consumer :
while(true)
fullBuffers.P();
mutex.P();
buffer.consume(consumed item);
mutex.V();
emptyBuffers.V();
如果我有超过 1 个生产者和/或超过 1 个消费者,为什么这不起作用?我到处寻找,但找不到我理解的答案:s。
互斥信号量确保没有 2 个进程同时在缓冲区中工作,所以我看不出如果你有更多进程,这个属性会如何改变......
“解决方案”是将互斥锁更改为 ProducerMutex 和 ConsumerMutex。但是现在这意味着生产者和消费者可以同时在缓冲区中,这是不允许的,对吧?
我真的没有得到这个:s