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

Linux 共享内存:位置和锁定策略,linux,shared,shared-memory,Linux,Shared,Shared Memory,我有一个创建共享内存区域的writer,我想确保在writer准备就绪之前,读卡器无法打开()该区域。我的老套做法是writer将shm_以只读模式打开。正确构造区域后,I chmod()将创建该文件。这太恶心了,我无法使用fcntl()文件描述符来更改权限。有什么建议吗(除了在该地区进行一些糟糕的同步之外?) 为什么chmod()令人恶心?部分原因是没有glibc代码(即公开的)来告诉我共享内存区域的位置(例如/dev/shm)。glibc中有一些代码可以查看挂载,我不想复制它,但如果没有人能

我有一个创建共享内存区域的writer,我想确保在writer准备就绪之前,读卡器无法打开()该区域。我的老套做法是writer将shm_以只读模式打开。正确构造区域后,I chmod()将创建该文件。这太恶心了,我无法使用fcntl()文件描述符来更改权限。有什么建议吗(除了在该地区进行一些糟糕的同步之外?)


为什么chmod()令人恶心?部分原因是没有glibc代码(即公开的)来告诉我共享内存区域的位置(例如/dev/shm)。glibc中有一些代码可以查看挂载,我不想复制它,但如果没有人能给我比chmod()更好的解决方案,我可能没有选择。

您当然可以使用mmap,而不是使用shm_open,这允许您使用您选择的目录中的文件(可能是将其放在ramdisc上的优化)

但是为了解决锁定问题,您可能应该在共享区域中使用互斥锁,或者(在推送时)只在文件中使用互斥锁


但是,如果您试图使其表现为队列,则可能应该使用更具队列类型的IPC对象。

这正是同步功能的用途。例如,在该区域中共享互斥体的进程将是完美的。