多个进程取消链接共享内存,仅当所有进程退出时才需要取消共享内存的链接

问题描述 投票:0回答:1

我正在编写一个共享库,该库为其读取器和写入器进程提供读取/写入功能。Reader或Writer进程可以按任何顺序启动,可以随时停止,然后可以重新启动。

要实现上述两个过程的方案,我都将共享内存打开为O_CREATE: g_shmfd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);

现在,只要一个进程出现故障,如果我shm_unlink,则下次我不希望打开的新共享内存对象。如果我已关闭可解决上述问题的fd,但此解决方法永远不会破坏共享内存。实现多个进程始终打开一个已打开的共享内存对象的最佳方法是什么,只有在所有进程shm_unlink都销毁它时才销毁它,而不仅仅是单个进程调用shm_unlink销毁对象并在下次shm_open销毁它创建一个新的共享内存对象。

shared-libraries ipc shared-memory
1个回答
0
投票

您可以在O_EXCLshm_open()中设置O_CREAT标志,以检查共享内存对象是否已存在。如果已经存在,则shm_open将失败,返回码为EEXIST

EEXIST: O_CREAT和O_EXCL都指定为shm_open(),并且name指定的共享内存对象已存在。

© www.soinside.com 2019 - 2024. All rights reserved.