mmap 是原子的吗?

Bee*_*ope 10 linux concurrency multithreading mmap memory-mapping

mmap调用的效果是原子的吗?

也就是说,对mmap访问受影响区域的其他线程而言,由 所做的映射更改是否以原子方式出现?

作为试金石,请考虑您mmap在一个全为零的文件中执行 a 的情况(来自线程T1,这是此时唯一的线程),然后开始从该区域读取的第二个线程T2。然后,再次在 T1(原始线程)上mmap对同一区域进行第二次调用,将映射替换为针对所有 1 的文件的新映射。

是否有可能为读者线程读取一些页面一(即,见第二mmap的效果),然后随后从一些页面读取零(即,见效果的第一个映射)?

您可以假设读取器线程上的读取已被正确隔离,即上述效果不仅仅由于 CPU/一致性级别的内存访问重新排序而发生。

Mik*_*son -3

内存映射发生在进程级别,因此属于同一进程的所有线程都会立即看到。

  • @Barmer,是的,不像任何人都会将 malloc 建立在它的基础上,或者其他什么。 (3认同)
  • @BeeOnRope `mmap()` 通常不会在性能关键的内部循环中找到。 (2认同)