来自 fsync(2):
fsync() transfers ("flushes") all modified in-core data of (i.e., modified
buffer cache pages for) the file referred to by the file descriptor fd to
the disk device (or other permanent storage device)
fsync 会产生什么影响FD是通过内存中的 API 之一获得的,例如shm_open(3p)或`memfd_create(2)*?是否有必要显式提交对内存对象的更改?
答案1
没有效果。它与永久存储无关。
从历史上看,混合 mmap() 和 read()/write() 可能会产生不一致的结果。
现代 Linux 的结构非常仔细,可以在每个受支持的 CPU 上正常工作。尽管如果您的系统过于晦涩难懂,您仍然可能是发现特定于硬件的错误的不幸者。
关键是在符合 POSIX 的操作系统上,可能需要使用同步()如果您希望 read() 之后能够一致地工作,则在将更改写入文件的内存映射后刷新。如果您想了解 POSIX 规则,查看 msync() 的 MS_INVALIDATE 标志及其存在意味着什么可能会有所帮助:)。
然而,POSIX msync() 专门针对与持久存储关联的映射。它对“共享内存对象”有什么影响尚未定义。所以这将是一个非常晦涩的方式来回答你原来的问题。
还要记住,仅仅因为某些东西实现了与 POSIX 名称相同的系统调用,它并不一定提供与 POSIX 相同的保证。实际上只有少数操作系统版本已提交给 POSIX 测试套件。 (需要花钱)。