【发布时间】:2014-10-14 17:44:06
【问题描述】:
我有一个场景,其中进程 A 打开并写入一些共享内存段“foo”,而进程 B 打开并读取(仅读取)该内存。每当 A 重新启动时,它都会清除共享内存文件(这是为了防止陈旧的文件滞留并防止 B 错误地打开一个陈旧的文件)。
问题是,如果我重新启动A,我基本上会使B正在使用的共享内存“foo”失效,需要重新启动B。我想通过以下方式解决这个问题:
每当 A 启动时,它都会查找“foo”,但在调用 shm_unlink(“foo”) 之前,它会向“foo”中的标头写入一些内容 - 一些标志 - 这表示它不再有效。然后它调用 shm_unlink("foo") 然后通过 shm_open 和 O_CREAT 重新创建它。 B 在尝试依赖 mem_mapped "foo" 的内容之前会检查这个标志,如果它发现标志无效,它会重新加载(即等待几秒钟,然后再次在文件系统中搜索 "foo" 并内存映射它)。
不过,我担心的是,如果我 shm_unlink("foo") 并重新创建它,那么 B 可能不再依靠陈旧的 "foo" 来读取有效性标志!这样的做法不安全吗?
【问题讨论】:
标签: c shared-memory