【问题标题】:How can I guarantee the order of async writes to file under Windows?如何保证在 Windows 下异步写入文件的顺序?
【发布时间】:2015-10-25 13:31:48
【问题描述】:

鉴于此伪代码:

  1. 打开文件进行异步访问
  2. Value1 写入文件末尾位置
  3. Value2 写入文件末尾,与 2 在同一线程中。

我能否确定Value1始终Value2 之前,我怎样才能避免竞争条件?

【问题讨论】:

    标签: winapi asynchronous io


    【解决方案1】:

    我可以确定 Value1 将是 -allays- 在 Value2 之前,并且 Value2 不会覆盖 Value1

    没有。 Win32 不做这样的保证。

    通常的方法是自己管理写入位置,方法是在OVERLAPPED 实例的字段中指定开始写入的位置。 IE。您确保先完成哪个写入并不重要。

    请参阅WriteFile 的文档中的同步和文件位置

    【讨论】:

    • 发现证据:“有了异步 I/O 支持,内核模式驱动程序不必按照发送到 I/O 管理器的顺序处理 I/O 请求。I/ O manager 或更高级别的驱动程序可以在收到 I/O 请求时对其进行重新排序。驱动程序可以将大型数据传输请求拆分为较小的传输请求。 msdn.microsoft.com/en-us/library/windows/hardware/
    • 真的,先写哪个的问题无关紧要。您必须在发出请求时指定要写入的偏移量,因为没有“写入文件末尾”的选项,而且异步句柄不会像同步句柄那样跟踪当前位置.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多