假设一个C / C ++ Linux应用程序具有固定大小的日志文件和两个操作此日志文件的线程:Producer
和Consumer
。 Producer
线程生成大部分数据,这些数据必须作为连续块保存在日志文件中。 Consumer
线程从该日志文件中随机读取数据(直到日志文件中的数据移动到某个长期存储中)。
我想使用pwrite
和fsync
通过Producer
线程将数据写入日志,因为根据众多消息来源,这是保持日志的常见做法。但同时我想让Consumer
线程通过mmap
读取日志文件,因为数据是随机读取的,我希望通过madvise
加速读取。
问题是:操作系统(Linux,OS X或任何其他POSIX兼容的操作系统)是否提供保证,如果页面当前从mmap
'ed文件加载到内存,它将自动更新当Producer
线程通过pwrite
更新日志文件中的相应块时,或者至少是无效的?如果没有,我应该怎么做让Consumer
线程在更新后立即看到更新的数据?