2016-11-07 32 views
0

私は、System.IO.Streamクラスを使用して通信する(接続ごとに1つのストリーム)WebSocketサーバーを持っています。サーバーは送受信する必要があります(C#.NET 2.0)。ストリームオブジェクトは、接続を受け入れると生成されたTcpClientから作成されます。C#System.IO.NetworkStream読み取り/書き込み競合の条件

私はすべての受信メッセージを処理する1つのスレッドでStream.Readを持っています。メッセージが入ったときにStream.Read()がブロックされるループです。

別のスレッドでは、ときどきStream.Write()を使用してメッセージをクライアントに返す必要があります。

私の質問は、これまで競争状態ですか? Stream.Read()が待機している間にStream.Write()を起動すると、受信した読み込みデータを混乱させる可能性がありますか?または私のためのリソースをロックアップするほどスマートなストリームですか? Read()とWrite()の両方に同時に座っていると、何かが壊れることはありますか?

答えて

0

もう少し調査したら、それがNetworkStreamオブジェクトであることが判明しました。これは確かに競合状態ずに、同期の読み出し/書き込みを処理します:

https://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream(v=vs.110).aspx

読み取りおよび書き込み操作の同期を必要とせずにNetworkStreamクラスのインスタンス上で同時に行うことができます。書き込み操作に固有のスレッドが1つと読み取り操作に固有のスレッドが1つある限り、読み取りスレッドと書き込みスレッドの間には相互干渉はなく、同期は不要であり、同期は不要です。」

関連する問題