小编Ody*_*Ody的帖子

当多个进程使用该段时,Posix 共享内存使用 mremap 调整大小

我将一些数据存储在多个进程使用的共享内存数组中。在某些时候,我想扩大阵列。

假设进程之间已经有同步机制

最初,进程 1 将创建段,进程 2 将打开它。

过程1
shm_open() O_CREAT
ftruncate()
mmap() MAP_SHARED

过程2
shm_open()
mmap()

在某一时刻,一个进程想要扩大数组并调整共享段的大小。

处理 1 次调用
ftruncate()
mremap() MREMAP_MAYMOVE

是否应该通知进程 2 调整大小并调用mremap()更新它自己的虚拟地址?

如果必须通知进程 2,我正在考虑使用一些元数据打开第二个共享内存段,例如表的容量和互斥锁。每个进程最初从共享内存中存储表的容量,并在每个操作中根据共享内存元数据值检查本地值。如果值已更改,它将调用mremap()

如果mremap()在调整大小后必须在每个进程上调用,这是一种正确的方法吗?

c c++ linux mmap shared-memory

4
推荐指数
2
解决办法
882
查看次数

标签 统计

c ×1

c++ ×1

linux ×1

mmap ×1

shared-memory ×1