2011-10-07 39 views
0

我有一位创建共享内存区域的作者,我想确保读者在作者准备好之前无法shm_open()该区域。我这样做的做法是编写者将shm_open在只读模式。一旦该区域正确构建,我chmod()该文件。这很糟糕,我不能fcntl()文件描述符来更改权限。任何建议(短缺在该地区做一些可怕的同步?)共享内存:位置和锁定策略

为什么是chmod()yucky?部分原因是没有glibc代码(暴露的是)告诉我共享内存区域在哪里(例如/ dev/shm)。在glibc中有一些代码可以查看坐骑,我不想复制它,但如果没有人能给我比chmod()更好的解决方案,可能没有选择。

+1

这正是同步功能的用途。例如,该地区的进程共享互斥体就是完美的。 –

回答

0

而不是使用shm_open,你当然可以使用mmap - 这允许你在你选择的目录中使用一个文件(也许这是一个优化,把它放在一个ramdisc上)。

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

但是,如果您试图使其表现为一个队列,也许您应该使用更多队列类型的IPC对象。