1

我们已经非常熟悉在单个进程中由多个线程访问的共享数据。但是我们如何才能让多个进程共享一块内存呢?

4

3 回答 3

1

您想要的例程是mmap,它接受一个文件描述符,并返回一个指向一块内存的指针。然后,多个进程都使用相同的文件名来访问它。当然,您需要协调读取/写入,以便没有人需要处理损坏的数据。

文件名可以是文件系统中实际文件的名称,也可以只是传递给shm_open.

实际上,这取决于您要做什么。如果您只是fork()为了创建附加进程,则子进程与父进程共享内存,但有某些(记录在案的)例外情况。除非和直到你打电话exec()。但是,使用fork()withoutexec()可能会导致无数头痛,因此除了简单的情况外,不应这样做。

于 2012-04-09T13:02:33.747 回答
1

有关详细信息,请参阅shm_overview(7),但这里有一个快速调用函数来创建/删除匿名内存映射:

  • shm_open(2)创建和/或附加到共享内存并为其获取文件描述符
  • 可选ftruncate(2),在创建时设置内存段的大小
  • mmap(2)将共享内存映射到您的进程地址空间
  • munmap(2)从进程地址空间中删除映射
  • shm_unlink(3)删除共享内存段
于 2012-04-09T13:56:03.573 回答
0

为了完整的其余答案,您还可以使用shmget(2)来创建共享内存块,使用shmat(2)来进行附加。这就是 Linux 版 Google Chrome 用来在其进程之间共享内存的方式。

于 2012-04-10T02:31:59.530 回答