FlushFileBuffers是否需要跨多个进程同步文件数据?

时间:2014-07-10 21:13:00

标签: windows winapi io

我有一个由许多进程读/写的文件,它们使用互斥锁来序列化读/写。

我需要在FlushFileBuffers WriteFile之后致电ProcessA,以便ProcessB看到这些变化吗?或者ProcessB是否可以保证看到ProcessA所做的更改,假设此文件的操作系统磁盘缓存在所有进程之间共享?在调用WriteFile之后,我没有在文件上调用CloseHandle,我会在所有进程中保持打开,但是FILE_SHARE_READFILE_SHARE_WRITE标记已传递给CreateFile

这需要在Windows XP到Windows 8.1之间工作 - 我发现调用FlushFileBuffers会带来不可接受的性能瓶颈。

1 个答案:

答案 0 :(得分:3)

具有文件的内存映射视图的进程可以直接访问磁盘缓存中的页面;访问与同一台机器上的所有其他进程保持一致,并且您的互斥锁足以进行同步。

使用文件访问API的进程需要调用FlushFileBuffers以确保一致性。

如果您无法远离IPC的共享文件(例如,您无法更改其中一个参与者),您至少可以将您控制的文件迁移到内存映射文件视图,以获得巨大的性能优势。