【问题标题】:Is shared memory for fork shared if the program is run from two terminals in linux如果程序从 linux 中的两个终端运行,fork 的共享内存是否共享
【发布时间】:2015-06-25 09:31:48
【问题描述】:

如果在我的 c++ 代码中,我使用 mmap() 来共享一个全局变量,我从 linux 终端运行一个版本的程序,在同一台机器上,我打开另一个终端,并运行同一个程序,这两个程序会访问同一个共享的内存吗?

【问题讨论】:

    标签: c++ linux fork share mmap


    【解决方案1】:

    这取决于您如何使用mmap。如果两个程序都创建同一个文件(或共享内存节点或其他)的共享映射,是的。如果它们映射不同的文件,或者创建私有或匿名映射,则不会(尽管私有映射将使用写时复制,因此内存是共享的,直到任一进程写入它为止)。

    【讨论】:

      【解决方案2】:

      只有在以下情况下,两个进程才会看到内存映射区域的相同内容

      • 两个进程映射同一个文件
      • 两个进程中的映射都是使用MAP_SHARED 标志完成的。

      如果进行匿名文件映射,则没有后备文件,因此进程不会看到彼此的内容。要实现共享内存,您可以在tmpfs 挂载中创建一个文件(通常/dev/shm 可用)。或者,在 Linux 上,给定足够新的内核(Linux 3.17 或更高版本),系统调用memfd_create 可用于在一个进程中创建一个没有文件系统条目的tmpfs 文件,并与其他进程共享可以使用file descriptor passing 来让他们访问该文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-30
        • 2021-12-04
        • 2013-03-06
        • 1970-01-01
        • 2021-01-19
        • 2011-02-10
        • 1970-01-01
        • 2011-02-18
        相关资源
        最近更新 更多