2012-11-16 211 views
0

我在想,如果有一個以上的線程等待數據使用可System.Net.Sockets.NetworkStream.Read會發生什麼:多個線程等待NetworkStream.Read

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

其中myNetworkStream是共享的。當數據可用時,只有一個線程看到它或所有線程?

回答

1

documentation

使用的寫和讀簡單的單個線程同步阻塞I/O的方法。如果要使用單獨的線程處理您的I/O,請考慮使用BeginWrite和EndWrite方法,或BeginRead和EndRead方法進行通信。

...

讀寫操作可以同時上的NetworkStream類的實例,而不需要同步進行。只要有一個唯一的線程用於寫入操作並且一個唯一的線程用於讀取操作,讀寫線程之間就不存在交叉干擾,並且不需要同步。

所以我會說行爲是未定義的。

+0

我得到了我的答案。謝謝! – Mika

0

如果你的NetworkStream是共享的,那麼你的線程將互相干擾。根據我自己的經驗,每個線程都可以共享一個Socket,例如,如果您正在爲服務器執行此操作,則服務器上的每個線程都可以保持監聽同一個套接字,然後當客戶端到達時,一個線程將開始爲它服務,然後在另一個客戶端到達後,其他線程將開始服務它們,並且它們不會相互干擾。