-1

2つのプロセス(チャットルームなど)間で通信しようとしています。各プロセスには、独自のターミナルウィンドウが開いています。私は通信に名前付きパイプを使用しています。

これが私がしたことです:

「MYFILE」という名前のFIFO_FILEがあります。プロセスAはMYFILEに新しい行を書き込み、プロセスBはMYFILEから読み取り、その行をプロセスBの端末表示に出力します。ただし、プロセスBがMYFILEに新しい行を書き込みたい場合(セマフォについて私が理解していることから)、プロセスBが書き込みを完了するまで、プロセスAはMYFILEへの読み取り/書き込みをブロックされます。

私が達成したいのは、2つのプロセスが書き込みを行う場合、他のプロセスがファイルへの書き込みの前にあるときに、プロセスがブロックされないようにすることです。

私が考えることができる唯一の方法は、2つのFIFO_FILEを持つことです。しかし、この実装を実現するにはどうすればよいでしょうか。または、達成する他の方法はありますか?

消費者-生産者パターンを使用するように言われましたが、これで問題がどのように解決されるかわかりません。

どんな助けでも素晴らしいでしょう。ありがとう!!

4

2 に答える 2

0

提案 - 名前付きパイプを持つセマフォは本当に必要ありませんか?

いつでも好きなときに書き込めば、ほとんどの場合、読みたいものがあるまでブロックします。

Linux でシェル スクリプトを使用して名前付きパイプを使用するための短いチュートリアルを次に示します。

于 2012-06-09T04:51:20.303 に答える
0

ある種の *nix 環境を想定すると、これは機能しません。パイプの読み取り/書き込みは、PIPE_BUF の長さ未満である限り、アトミックであることが保証されています。両方のプロセスが同時に同じ fifo に書き込むことは、あまり意味がありません。ファイルへの書き込みと同じように考えてみてください。2 つの独立した書き込みの内容を分散させたいのはなぜでしょうか。あなたはそれをどのように理解しますか?

複数の fifo の使用を検討する必要があります。それでも、マルチスレッドまたはノンブロッキング FIFO を使用するか、selectまたはpoll本当に達成しようとしていることを達成する必要があります。

于 2012-06-09T05:03:56.053 に答える