将mmap与pwrite一起使用

时间:2014-12-11 21:57:07

标签: c++ linux mmap

假设一个C / C ++ Linux应用程序具有固定大小的日志文件和两个操作此日志文件的线程:ProducerConsumerProducer线程生成大部分数据,这些数据必须作为连续块保存在日志文件中。 Consumer线程从该日志文件中随机读取数据(直到日志文件中的数据移动到某个长期存储中)。

我想使用pwritefsync通过Producer线程将数据写入日志,因为根据众多消息来源,这是保持日志的常见做法。但同时我想让Consumer线程通过mmap读取日志文件,因为数据是随机读取的,我希望通过madvise加速读取。

问题是:操作系统(Linux,OS X或任何其他POSIX兼容的操作系统)是否提供保证,如果页面当前从mmap'ed文件加载到内存,它将自动更新当Producer线程通过pwrite更新日志文件中的相应块时,或者至少是无效的?如果没有,我应该怎么做让Consumer线程在更新后立即看到更新的数据?

0 个答案:

没有答案