我有一个由许多进程读/写的文件,它们使用互斥锁来序列化读/写。
我需要在FlushFileBuffers
WriteFile
之后致电ProcessA
,以便ProcessB
看到这些变化吗?或者ProcessB
是否可以保证看到ProcessA
所做的更改,假设此文件的操作系统磁盘缓存在所有进程之间共享?在调用WriteFile
之后,我没有在文件上调用CloseHandle
,我会在所有进程中保持打开,但是FILE_SHARE_READ
和FILE_SHARE_WRITE
标记已传递给CreateFile
这需要在Windows XP到Windows 8.1之间工作 - 我发现调用FlushFileBuffers
会带来不可接受的性能瓶颈。
答案 0 :(得分:3)
具有文件的内存映射视图的进程可以直接访问磁盘缓存中的页面;访问与同一台机器上的所有其他进程保持一致,并且您的互斥锁足以进行同步。
使用文件访问API的进程需要调用FlushFileBuffers
以确保一致性。
如果您无法远离IPC的共享文件(例如,您无法更改其中一个参与者),您至少可以将您控制的文件迁移到内存映射文件视图,以获得巨大的性能优势。