我们已经非常熟悉在单个进程中由多个线程访问的共享数据。但是我们如何才能让多个进程共享一块内存呢?
问问题
2729 次
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 回答