![発信者と受信者の間のメッセージング [閉じる]](https://linux33.com/image/127860/%E7%99%BA%E4%BF%A1%E8%80%85%E3%81%A8%E5%8F%97%E4%BF%A1%E8%80%85%E3%81%AE%E9%96%93%E3%81%AE%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
メッセージング(生産者 - 消費者)で、受信プロセスまたはメールボックスがメッセージを受信するまで送信プロセスがブロックされると、送信ブロックが発生します。
受信ブロックは、メッセージが利用可能になるまで受信者がブロックすることを意味します。
プロデューサ - 消費者の問題に対する解決策は、send()およびreceive()ステートメントをブロックすると簡単になります。
なぜ些細なことになったのですか?
答え1
あなたが引用しているように見える本(「オペレーティングシステムの概念」 - Silberschatz、Galvin、Gagne)には、トピックについて次のようなものが記載されています。
send() と receive() のさまざまな組み合わせが可能です。 send()とreceive()の両方がブロックされると、送信者と受信者の間にランデブーポイントがあります。プロデューサ - 消費者の問題に対する解決策は、send()およびreceive()ステートメントをブロックすると簡単になります。プロデューサーは単にブロック send() 呼び出しを呼び出し、メッセージが受信者またはメールボックスに渡されるのを待ちます。同様に、消費者がreceive()を呼び出すと、メッセージが利用可能になるまでブロックされます。
これは私にはっきりしているようです。
答え2
あなたの質問に対する答えは次のとおりです。消費者 - 生産者の問題に対する読み取り - 書き込み非ブロックソリューションを実装してみてください。
このようにすれば、つまりノンブロッキングの読み書き操作の問題をどのように解決するかを悩んでみると、バッファ管理が必要であることをすぐに気付くだろう。その後、並行性の状況では、リーダー/ライターの公平性などの問題に対処する必要があることがわかります。問題は急速に多面的に変化し、一部のサブ問題(公正性)には明確な解決策はありません。