私は複数の消費者/生産者の問題に少し立ち往生しています。それは私の講義ノートに載っていますが、なぜ単一の消費者/生産者のアプローチが機能しないのか理解できません。
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();
複数のプロデューサーおよび/または複数のコンシューマーがある場合、これが機能しないのはなぜですか?私はいたるところを見てきましたが、私が理解している答えを見つけることができません:s。
ミューテックスセマフォは、バッファで同時に動作している2つのプロセスがないことを確認するため、プロセスがさらにある場合にこのプロパティがどのように変化するかはわかりません...
「解決策」は、ミューテックスをProducerMutexとConsumerMutexに変更することです。しかし、これは、プロデューサーとコンシューマーが同時にバッファーに入ることができることを意味しますが、これは許可されるべきではありませんか?
私は本当にこれを取得していません:s