【问题标题】:Is it safe to use a BinaryReader and a BinaryWriter derived from the same stream source in separate threads?在不同的线程中使用从同一流源派生的 BinaryReader 和 BinaryWriter 是否安全?
【发布时间】:2013-12-30 22:11:40
【问题描述】:

我有一个相关但不同的问题的场景。所以它可能看起来像一个重复的帖子,但它不是

我正在开发一个类,该类使用最终在 UI 线程上创建的 TcpClient 来读取和写入数据。当 TcpClient 创建时,设计是连接到服务器并立即创建 BinaryReaderBinaryWriter

BinaryReader 用于执行阻塞读取的专用线程。当数据到达时,我生成一个事件并传递数据进行处理。冲洗并重复。

BinaryWriter 在数据到达另一个线程时使用。现在它恰好是 UI 线程,但它不一定是。已知的一件事是它与阻塞读取器正在运行的线程不同。

一次只有一个进程会访问任一流处理程序,因此我不必担心两个线程同时访问 BinaryWriter,但会添加锁定。

这是可行的,但由于线程很难,我不想只是假设这是声音设计。我还有其他关于他们的寿命的问题将单独提出。

【问题讨论】:

    标签: c# multithreading stream tcpclient


    【解决方案1】:

    不太清楚,总是发一个sn-p。如果他们包装了您从 TcpClient.GetStream() 获得的 NetworkStream,那么就没有问题。 NetworkStream 的 MSDN 文章中明确提到:

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

    【讨论】:

    • 在这种情况下,我对概念比对实际代码更感兴趣。我认为您的 MSDN 参考回答了这个问题。但是您关于包装 NetworkStream 的评论仅在创建 Binaryxxxx 时才能访问。你有什么建议?
    • 我没有任何建议,只是不清楚他们从哪个流中读取/写入。
    • 对不起。它来自 TcpClient。具体来说就是 GetStream() 方法。
    猜你喜欢
    • 2020-02-20
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多