共享内存:位置和锁定策略

时间:2011-10-07 03:27:53

标签: linux shared shared-memory

我有一个创建共享内存区域的编写器,我想确保读者在编写器准备好之前无法shm_open()该区域。我这样做的hacky方式是编写器将以只读模式shm_open。一旦区域正确构建,我chmod()文件。这很令人讨厌,我不能通过fcntl()文件描述符来更改权限。有什么建议(在该地区做一些可怕的同步吗?)

为什么chmod()很难吃?部分是因为没有glibc代码(暴露出来)告诉我共享内存区域的位置(例如/ dev / shm)。 glibc中有一些代码可以查看坐骑,我宁愿不复制它,但如果没有人可以给我一个比chmod()更好的解决方案,那么可能别无选择。

1 个答案:

答案 0 :(得分:0)

你可以使用mmap,而不是使用shm_open,这可以让你在你选择的目录中使用一个文件(可能是将它放在ramdisc上进行优化)。

但是要解决锁定问题,也许你应该在共享区域中使用互斥锁,或者(在推送时)只使用flock()文件。

如果您尝试使其表现为队列,那么您可能只需使用更多队列类型的IPC对象。