我将一些数据存储在多个进程使用的共享内存数组中。在某些时候,我想扩大阵列。
假设进程之间已经有同步机制
最初,进程 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()在调整大小后必须在每个进程上调用,这是一种正确的方法吗?