2016-11-07 71 views
0

我有一個使用System.IO.Stream類進行通信的WebSocket服務器(每個連接有1個流)。服務器需要發送和接收(C#.NET 2.0),並且在接受連接時從生成的TcpClient創建Stream對象。C#System.IO.NetworkStream讀/寫競爭條件

所需的設置是我在一個處理所有傳入消息的線程上有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類的實例來進行,而不需要同步寫。只要有一個唯一的線程用於寫入操作和一個唯一的線程用於讀取操作,讀寫線程之間就不會出現交叉干擾,並且不需要同步。「