2012-05-10 33 views
0

FIFOに書き込む複数のプロセスを記述する必要があります。それらの間でどのように同期するのかと思っています。ロックが必要ですか?他の人がロックを解放するのを待つ? プロセス間通信を実現する他の最良の方法を教えてください。複数のプロセス読み取り/書き込みfifo

+0

シナリオをより詳細に記述する必要があります。 1つの特定の問題は、「各メッセージがどれくらい大きいか」です。 FIFOバッファのサイズより小さく( 'write()'を1回呼び出すだけで書かれている場合)、FIFOを使用するプロセスの数にかかわらず、各メッセージはアトミックになります。また、書き込みプロセスがすべてFIFOを開き、完了するまで開いたままにするか、各メッセージに対して開閉するかについて少し説明する必要があります。データは「サーバー」にのみ送られますか、またはサーバーは返信しますか?サーバーが返信する場合、どのように返信しますか? –

+0

ソケットを使う方が良いかもしれません。各ソケットはクライアントとサーバー間の双方向接続になります。私はあなたが中央サーバプロセスを持っていると仮定していますが、いくつかのプログラムのコレクションはすべて無作為にインターワーキングされているわけではありませんが、余分な記述でも 'プロセスジオメトリ'について説明する必要があります。 –

+0

FIFOバッファのサイズをどのように知ることができますか?メッセージは最大で500kです。このサイズは設定可能です。私が心に留めていることは、複数のプロセスがそれに書き込むFIFOを持つことです。そして、1つのプロセスはそこから読み取り、その内容をネットワークに送信します。 –

答えて

2
"do I need to write some lock" 

まあ、おそらくはい。共有メモリ(pthreads、openmp)を使って作業している場合は、競合状態やデータの無効化などを防ぐために、ある種の読み書きロックが必要です。分散メモリを使用している場合は、 1つの場所ですべてのデータを取得するリダクション操作の種類。

"if yes then would that be slow as a process has to wait for the other to free the lock?" 

これはプログラマによって異なります。低速で非効率的なプログラムを書くのは簡単ですが、プログラムの実行速度やスピードなどを向上させる方法には時間がかかります。パフォーマンスのボトルネックがどこにあるかは、必ずしも実際に発生する場所ではないと思います。デバッガとパフォーマンスアナライザを使って、最高の友達になれることをお勧めします。

ここから始めるにはいくつかのリソースがあります。私は研究を行い、コードを書いて、より良い助けを得るために特定の質問をすることをお勧めします。

https://computing.llnl.gov/tutorials/pthreads/

https://computing.llnl.gov/tutorials/openMP/

https://computing.llnl.gov/tutorials/mpi/

また、いくつかの他の偉大なリソースのための右に「関連の質問をチェックしてください。

関連する問題