【问题标题】:Is it safe to concurrently read from shared memory?从共享内存同时读取是否安全?
【发布时间】:2017-07-12 09:33:19
【问题描述】:

我正在跨多个进程共享一些内存(使用shm_open 创建,我使用mmap 映射不同的“区域”)。我正在使用命名信号量来同步对该内存的访问。

我在该内存中有一个只读区域(它已由创建共享内存对象的进程设置)。我还需要使用互斥锁来让进程读取该区域吗?如果可以同时读取该区域,我可以删除命名信号量并共享未命名信号量。

问题与here 的问题类似,但可能 OP 不够清楚。

【问题讨论】:

标签: linux shared-memory


【解决方案1】:

根据多个来源,读取相同的内存似乎不会引入竞争条件,因此可以在没有锁定的情况下完成。我有几个系统从几个月开始运行,一个进程写入(使用全局锁),另外两个进程不断读取相同的共享内存,我从来没有遇到过问题。

【讨论】:

  • 如果我有一个进程写入共享内存,而其他进程从该内存读取,我是否需要在写入时锁定内存,还是原子操作?
  • 对你的两个问题都没有:你不需要锁定内存,它不是原子操作。
  • 为什么我不需要锁定?如果我不锁定,而且它不是原子的,当另一个进程正在写入时,一个进程可以读取,不是吗?
  • 在上述情况下,一个进程写入共享内存之前共享它。如果您需要并发写入,则需要锁,但问题都是关于并发读取。
猜你喜欢
  • 2018-09-23
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2020-03-31
  • 1970-01-01
相关资源
最近更新 更多