从共享内存中并发读取是否安全?
Is it safe to concurrently read from shared memory?
我正在跨多个进程共享一些内存(使用 shm_open
创建,我将不同的 "regions" 映射到 mmap
)。我正在使用命名信号量来同步对该内存的访问。
我在该内存中有一个只读区域(它已由创建共享内存对象的进程设置)。我是否仍需要使用互斥锁让进程读取该区域?如果可以同时读取该区域,我可以删除命名信号量并改为共享未命名信号量。
问题与here的问题类似,但可能OP不够清楚。
根据多个消息来源,读取同一内存似乎不会引入竞争条件,因此无需锁定即可完成。我有几个系统 运行 从几个月开始,一个进程写入(使用全局锁),另外两个进程连续读取相同的共享内存,我从来没有遇到过问题。
我正在跨多个进程共享一些内存(使用 shm_open
创建,我将不同的 "regions" 映射到 mmap
)。我正在使用命名信号量来同步对该内存的访问。
我在该内存中有一个只读区域(它已由创建共享内存对象的进程设置)。我是否仍需要使用互斥锁让进程读取该区域?如果可以同时读取该区域,我可以删除命名信号量并改为共享未命名信号量。
问题与here的问题类似,但可能OP不够清楚。
根据多个消息来源,读取同一内存似乎不会引入竞争条件,因此无需锁定即可完成。我有几个系统 运行 从几个月开始,一个进程写入(使用全局锁),另外两个进程连续读取相同的共享内存,我从来没有遇到过问题。