多进程取消链接共享内存,需要只有在所有进程退出时才应该取消链接共享内存
Posted
技术标签:
【中文标题】多进程取消链接共享内存,需要只有在所有进程退出时才应该取消链接共享内存【英文标题】:multiple process unlinking share memory, need that shared memory should be unlink only when all process exit 【发布时间】:2019-11-26 06:37:50 【问题描述】:我正在编写一个共享库,它为其读取器和写入器进程提供读/写功能。 Reader 或 Writer 进程可以按任意顺序启动,也可以随时停止然后重新启动。
为了实现两个进程的上述场景,我将共享内存打开为O_CREATE:
g_shmfd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);
现在每当一个进程出现故障时,如果我shm_unlink
,那么下一次我不想要打开新的共享内存对象。
如果我关闭了解决上述问题的 fd,但共享内存永远不会被此解决方法破坏。
实现多个进程始终打开一个已打开的共享内存对象的最佳方法是什么,并且只有在所有进程shm_unlink
它时才应该销毁它,而不仅仅是调用shm_unlink
销毁对象和下次shm_open
的单个进程创建一个新的共享内存对象。
【问题讨论】:
【参考方案1】:您可以在shm_open() 和O_CREAT
中设置O_EXCL
标志以检查共享内存对象是否已经存在。如果它已经存在 shm_open 将失败并返回代码EEXIST
EEXIST:
O_CREAT 和 O_EXCL 都被指定为 shm_open()
和
name 指定的共享内存对象已经存在。
【讨论】:
谢谢,我正在寻找的是,当一个进程退出并调用 shm_unlink 时,它会销毁 shm 对象,但只有在所有进程都退出时才应销毁它。以上是关于多进程取消链接共享内存,需要只有在所有进程退出时才应该取消链接共享内存的主要内容,如果未能解决你的问题,请参考以下文章
具有共享内存的 Pytorch 多处理导致 matmul 慢 30 倍(只有两个进程)