複数のコンシューマ/プロデューサの問題で少し固執しています。私の講義ノートには現れていますが、なぜ単一の消費者/生産者のアプローチがうまくいかないのか理解できません。セマフォを持つ複数のプロデューサ/コンシューマ
1つの消費者と1人のプロデューサーのための典型的なアプローチは次のようになります。私は、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();
なぜこれが動作しないのだろうか?私はどこにでも見ましたが、私が理解している答えは見つけられません。
ミューテックスセマフォが同時にバッファに働いて何の2つのプロセスが存在しないことを確認しますので、私はあなたがより多くのプロセスを持っている場合、このプロパティはおそらく変更することができますどのように表示されていない...
「ソリューションあなたがmutexをProducerMutexとConsumerMutexに変更したということです。しかし今は、プロデューサとコンシューマが同時にバッファに入っていることを意味しますが、これは許可されるべきではありません。
私は本当にこの届かない:http://en.wikipedia.org/wiki/Producer-consumer_problem(モジュロ命名)で与えられたソリューションですsの
私の試験で私を格付けする教授になるのは残念です。:)それにもかかわらず、私はあなたによれば、私はここでいくつかの基本的な側面を欠いていないとうれしいです。 Thx – bambinoh
少なくとも、あなたは引用するためのいくつかの参考文献があります(私以外は:)) –