【问题标题】:Is Asynchronous file IO thread safe?异步文件IO线程安全吗?
【发布时间】:2011-06-02 10:14:29
【问题描述】:

像 FileStream.BeginWrite 这样的异步文件 IO 线程安全吗?如果不是,那么它需要用“SyncLock”包裹,这意味着它仍然阻塞线程。

【问题讨论】:

  • 你能提供一个让你认为它不是线程安全的例子吗?

标签: .net file-io asynchronous filestream


【解决方案1】:

FileStream.BeginWrite 已经启动了一个新线程来访问这些文件。您不需要在单独的线程上启动FileStream.BeginWrite(因为这将是线程中的线程)。另一方面,多个FileStream.BeginWrite 函数不应同时访问同一个文件。

【讨论】:

    【解决方案2】:

    另外,如果资源被多个线程访问,这意味着它是一个共享资源,在c#中使用它们的资源很多。

    【讨论】:

      【解决方案3】:

      FileStream.BeginRead / BeginWrite 实现是异步的,但它们对重叠 I/O 的使用不是以线程安全的方式完成的。

      可以看到BeginRead/BeginWrite不接受读/写文件位置作为参数,所以对其他线程的操作(如Seek)可能会导致读/写在错误的文件位置。

      如果您仍然不相信,Microsoft 的 FileStream 实现明确指定“这不是线程安全的”。在BeginReadCore & BeginWriteCore 内的评论中。

      底线:如果您需要线程安全的重叠 I/O,则必须将 P/Invoke 与 ReadFile / WriteFile 结合使用。

      【讨论】:

        猜你喜欢
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-06
        • 2021-11-06
        • 1970-01-01
        • 2017-05-06
        相关资源
        最近更新 更多