2012-01-22 21 views
0

複数のコンシューマ/プロデューサの問題で少し固執しています。私の講義ノートには現れていますが、なぜ単一の消費者/生産者のアプローチがうまくいかないのか理解できません。セマフォを持つ複数のプロデューサ/コンシューマ

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の

答えて

0

を。もちろん、1P/1Cバージョンのためのミューテックスは必要ありません(バッファに1スロットしかない場合に有効です)。しかし、それはまたhttp://cs.gmu.edu/cne/modules/ipc/purple/prodsem.htmlで与えられたものと同じ解決策です。

ボトムライン:あなたはこれをうまくやっていると思うし、誰にもこの2ミューテックスの "解決策"を与えてくれた人はいないと思う。

+0

私の試験で私を格付けする教授になるのは残念です。:)それにもかかわらず、私はあなたによれば、私はここでいくつかの基本的な側面を欠いていないとうれしいです。 Thx – bambinoh

+0

少なくとも、あなたは引用するためのいくつかの参考文献があります(私以外は:)) –

関連する問題