【问题标题】:Shared memory: location and locking strategies共享内存:位置和锁定策略
【发布时间】:2011-10-07 03:27:52
【问题描述】:

我有一个创建共享内存区域的写入器,我想确保读取器在写入器准备好之前无法 shm_open() 该区域。我这样做的 hacky 方式是 writer 将以只读模式 shm_open。正确构建区域后,我 chmod() 文件。这很糟糕,我不能 fcntl() 文件描述符来更改权限。任何建议(在该地区做一些糟糕的同步?)

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

【问题讨论】:

  • 这正是同步函数的用途。例如,区域中的进程共享互斥体将是完美的。

标签: linux shared shared-memory


【解决方案1】:

除了使用 shm_open,您当然可以使用 mmap - 这允许您使用您选择的目录中的文件(也许将其放在 ramdisc 上是一种优化)。

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

如果你想让它表现得像一个队列,也许你应该改用一个更队列类型的 IPC 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2010-10-20
    • 2011-03-05
    相关资源
    最近更新 更多