2011-02-28 32 views
1

C#(MS Visual Studio 2010)を使用してプロデューサ - コンシューマの問題をシミュレートします。私は2つのexeプログラムを持っています。一つはプロデューサーであり、もう一つはConsumerです。実行中は、プロデューサは100個の整数をキューに挿入し、Consumerはそのキューから順番に削除します。C#で2つのプロセス間で共有キューを使用するにはどうすればよいですか?

私の問題は、2つのプロセス間で共有キューを使用する方法と、いくつかの小さなメッセージを渡すためにプロセス間通信を使用する必要がある場合です(Clipboard、COM、Data Copy、DDE、ファイルマッピング、メールスロット、パイプ、RPC、Windowsソケット)

ありがとうございました!

答えて

0

私は単純にMSMQのようなメッセージキューイングテクノロジを使用します。あなたの要求に合っているかどうかを調べてください。 NServiceBusと一緒にこれを使用すると、棚から完全なpub/subモデルが得られ、比較的使いやすいものになります。

0

もう1つの選択肢は、同時に複数の読み取り/書き込みの間でテーブルの並行性制御を使用するデータベーストランザクションテーブルを使用すると思います。

0

2つのプロセスが同じプロセス内のスレッドに変換された場合、それらは直接共有できるため、はるかに簡単です。

メモリマップされたI/Oを使用して、プロセスと名前付きミューテックス間の共有メモリ領域を確立し、1つのスレッドだけがそれを時間としてアクセスするようにすることができます。生のポインタに独自のキューを書く必要があります。間違ってしまうのは簡単です。

この場合でもキューがロックされていない可能性はありますが、それはやるのがずっと難しく、価値がない可能性があります。

+0

ありがとうございます。私はIPCについて勉強しているので、マルチスレッドプログラムは必要ありません。私は新しい問題を抱えています。バッファーとしてファイルを使用したいのですが、コンシューマープログラムがそこからデータを読み込みながら、プロデューサープログラムはデータを書き込みます。バッファは常にサイズ制限があるので、データを読み込むたびに1行を削除する必要があります。 Googleはファイルから行を削除すると言いました。一時ファイルに書き換えてから、既存のファイルを上書きする必要があります。ファイルから最初の行を削除するより良い方法はありますか? – Mia

+0

はい、それを循環バッファとして扱います。つまり、開始点と終了点を追跡します(最初は、両方とも正面を指しています)。追加するときは、最後を押し戻します。読んだら、フロントを前方に押してください。バッファーの終わりには、単に折り返します。詳細とリンクについては、http://en.wikipedia.org/wiki/Circular_bufferを参照してください。 –

関連する問題