1

二重およびバイナリ モード (メッセージではない) で単一の名前付きパイプを介して通信する 2 つのプロセスがあります。各プロセスには 2 つのスレッドがあり、1 つはパイプに書き込み、もう 1 つはパイプから読み取ります。パイプの両端での読み取りと書き込みは同期されていないため、読み取りと書き込みは完全に並行して行われます。各送信者はメッセージに番号を付けます。すべてのコードは C# で記述されています。パイプの作成と接続には、interop と Win32 を使用します。

サーバーとクライアントを起動し、2 つのスレッドを生成する MSTest の単体テストがあります。1 つはサーバーからクライアントにメッセージを送信し、もう 1 つはクライアントからサーバーに送信します。

問題: まれに、実際には一意のメッセージが 2 回以上受信されることがあります。

質問: Windows 上の二重パイプは、上記のようなマルチスレッドを処理できますか? または、パイプの一方の端で読み取り/書き込みを同期する必要がありますか?

更新 同期 IO で使用される全二重パイプは、両方向で機能しますが、同時には機能しません。パイプの一方の端で同時に読み取り/書き込みを行うと、間違いなく間違った結果が生成されます。WriteFile を呼び出すと、ブロックされた ReadFile スレッドが起動するようです。私の回避策は、2 つの単方向パイプを使用することでした。これもどこかでオススメです。重複した IO で動作する可能性がありますが、試していません。

4

0 に答える 0