我需要使用旧的C ++项目,其中每个进程将相同的数据加载到内存中。这是只读的,每个进程都具有完全相同的数据副本。最近,该服务开始颠覆它运行的系统。
我正在评估我可以对此进行更改的方式,我认为boost interprocess
库非常适合我的用例。我考虑的另一件事是使用外部数据存储,但由于延迟,我不太倾向于使用它。
我查看了boost
apis,他们似乎要求我们指定共享内存区域的大小。在我的情况下,这将不会是恒定的,因为需要加载的数据量会随着时间的推移而增长。这个共享内存可以调整大小吗?
在类似情况下,您也可以随意提出问题的替代建议或boost interprocess
的体验。
答案 0 :(得分:1)
要调整共享内存的大小,您可以使用shmctl,其中cmd=SHM_SIZE
。
这样做时你必须小心。如果减小尺寸,并且其他进程访问超出其大小的内存,您将获得SIGBUS信号。
另一个问题是如何通知其他进程已调整共享内存的大小。我想你可以使用消息队列或其他IPC机制。