c# System.IO.NetworkStream读写竞争条件

本文关键字:竞争 条件 读写 NetworkStream System IO | 更新日期: 2023-09-27 18:16:56

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

期望的设置是我有流。读取处理所有传入消息的一个线程。这是一个循环,当消息传入时Stream.Read()会被阻塞。

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

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

c# System.IO.NetworkStream读写竞争条件

经过更多的研究,它原来是一个NetworkStream对象。它确实在没有竞争条件的情况下处理同步读/写:

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

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