0

System.Net.Sockets.NetworkStream.Readを使用してデータが利用可能になるのを待っているスレッドが複数ある場合はどうなるのだろうと思っていました。

 numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);

myNetworkStreamが共有されている場所。データが利用可能な場合、1 つのスレッドだけがデータを認識しますか?それともすべてのスレッドを認識しますか?

4

2 に答える 2

1

ドキュメントから:

単純なシングルスレッド同期ブロッキングI/Oには、WriteメソッドとReadメソッドを使用します。別々のスレッドを使用してI/Oを処理する場合は、通信にBeginWriteメソッドとEndWriteメソッド、またはBeginReadメソッドとEndReadメソッドの使用を検討してください。

..。

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

ですから、振る舞いは未定義だと思います。

于 2012-11-16T19:14:40.623 に答える
0

NetworkStream が共有されている場合、スレッドは互いに干渉します。私自身の経験に基づいて、各スレッドはソケットを共有できます。たとえば、サーバーに対してこれを行う場合、サーバー上の各スレッドは同じソケットでリッスンし続けることができ、クライアントが到着すると、1 つのスレッドがサービスを開始します。 、その後、別のクライアントが到着した後、他のスレッドがそれを提供し始め、それらは互いに干渉しません.

于 2012-11-16T19:42:39.413 に答える