gpt4 book ai didi

ios - mmap、msync(MS_ASYNC) 和 munmap

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:21 26 4
gpt4 key购买 nike

如果我在内存映射区域上使用 MS_ASYNC 调用 msync,同步过程将被异步处理。

但是,如果我立即对该区域调用 munmap,我是否可以假设 msync 将安全执行?或者我必须在 munmap 之前调用 msync 吗?

最佳答案

简短的回答是肯定的——即使您从不调用msync,对内容的更改最终(并且安全地)进入文件。来自 man 2 mmap:

MAP_SHARED
Share this mapping. Updates to the mapping are visible to other
processes that map this file, and are carried through to the
underlying file. (To precisely control when updates are carried
through to the underlying file requires the use of msync(2).)

也许更重要的是,man 2 msync 有这个注释:

Since Linux 2.6.19, MS_ASYNC is in fact a no-op, since the kernel properly tracks dirty pages and flushes them to storage as necessary.

请记住:mmap 将文件系统缓存的页面直接暴露给用户空间,就像任何其他缓存系统一样,更改将在将来的某个时间传播到后备存储。即使您的程序崩溃了,您对页面所做的更改最终也会得到传播。 msync 的使用是为了保护您免受断电之类的影响。

关于ios - mmap、msync(MS_ASYNC) 和 munmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26097316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com