从另一个进程读取未刷新的页面

发布于 2024-11-01 03:56:07 字数 136 浏览 7 评论 0原文

我有一个生产者进程,用于写入 mmap 文件和一个从该文件读取的消费者进程。这是在 Linux 上。

如果生产者对 mmap 进行了更改并且没有立即刷新,那么当消费者访问它时会发生什么?它会从磁盘中获取旧版本,还是足够聪明地获取未刷新的页面?

I have a producer process, that writes to a mmap'd file and a consumer process that reads from it. This is on Linux.

If the producer makes a change to the mmap and its not instantly flushed, when the consumer access it what happens? Will it get the old version from the disk, or is it clever enough to get the unflushed page?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦在夏天 2024-11-08 03:56:07

mmap() 手册页

MAP_SHARED

与映射此对象的所有其他进程共享此映射。
存储到该区域相当于
写入文件。该文件可能没有
实际上会更新直到 msync(2) 或
munmap(2) 被调用。

底线:如果您在调用 mmap() 时指定,则其他进程将立即看到更改。根据文档,您必须使用MAP_SHAREDMAP_PRIVATE,它们控制映射同一文件区域的其他进程的行为。

From the mmap() manual page:

MAP_SHARED

Share this mapping with all other processes that map this object.
Storing to the region is equivalent to
writing to the file. The file may not
actually be updated until msync(2) or
munmap(2) are called.

Bottom line: changes will be immediately visible to other processes if you specify so when calling mmap(). According to the documentation you have to use either MAP_SHARED or MAP_PRIVATE, which controls the behaviour with regard to other processes mapping the same file area.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文