0

私は複数の消費者/生産者の問題に少し立ち往生しています。それは私の講義ノートに載っていますが、なぜ単一の消費者/生産者のアプローチが機能しないのか理解できません。

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

4

1 に答える 1

0

これは、 http://en.wikipedia.org/wiki/Producer-consumer_problem(モジュロネーミング)で提供されているソリューションです。もちろん、これは1P / 1Cバージョンのミューテックスは必要ないことも示しています(これは、バッファーにスロットが1つしかない場合に有効です)。ただし、 http://cs.gmu.edu/cne/modules/ipc/purple/prodsem.htmlに記載されているものと同じソリューションでもあります。

結論:あなたはこれをうまくやっていると思います、そしてあなたにこの2ミューテックスの「解決策」を与えた人は誰でもそうではありません。

于 2012-01-22T14:10:28.657 に答える