C#System.IO.NetworkStream读/写竞争条件

时间:2016-11-07 12:57:33

标签: c# multithreading server stream

我有一个WebSocket服务器,它使用System.IO.Stream类进行通信(每个连接1个流)。当我接受连接时,服务器需要发送和接收(C#.NET 2.0)并从生成的TcpClient创建Stream对象。

所需的设置是我在一个处理所有传入消息的线程上有Stream.Read。它是一个循环,Stream.Read()应该在消息进入时阻塞。

在另一个线程上,我需要偶尔使用Stream.Write()将消息发送回客户端。

我的问题是,是否会出现竞争条件?当我在Stream.Read()正在等待/读取我可以混淆传入的读取数据时触发Stream.Write()是否可能?或者Stream是否足够聪明以锁定我的资源?有没有这两个坐在Read()和Write()同时可以破坏的东西?

1 个答案:

答案 0 :(得分:0)

经过一些研究,结果证明它是一个NetworkStream对象。哪个确实处理没有竞争条件的同步读/写:

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

  

可以在NetworkStream类的实例上同时执行读写操作,而无需同步。只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读写线程之间就不会存在交叉干扰,也不需要同步。“