仅读取共享内存时的互斥锁

Posted

技术标签:

【中文标题】仅读取共享内存时的互斥锁【英文标题】:Mutex locking when shared memory is only read 【发布时间】:2014-02-05 19:35:35 【问题描述】:

如果线程之间的共享内存只被任何线程读取而从不写入,我的印象是否正确,互斥保护是不必要的?

这是因为线程被抢占的地方,在重新调度时总是可以再次起飞,并且内存内容不会改变。

【问题讨论】:

这个previous SO 可能会回答。 @SunEric:它没有提到我的问题的答案。 【参考方案1】:

是的,你是对的,读取同一个变量的多个线程不会引入竞争。

【讨论】:

@KerrekSB 大声笑,双关语不是故意的) 它们不能相互竞争,但如果有任何东西写入内存,您需要在写入和读取之间设置某种屏障以避免数据竞争。 在这种情况下,使用的典型机制是readers-writer lock。【参考方案2】:

C++11 和 C11 都将数据竞争定义为通过多个执行上下文访问内存位置,而无需排序,其中至少一个访问是写入。如果你没有写,你就没有种族。

【讨论】:

以上是关于仅读取共享内存时的互斥锁的主要内容,如果未能解决你的问题,请参考以下文章

如果只有一个线程使用互斥锁,跨线程的共享内存会损坏吗?

一个用户崩溃时共享内存中的互斥锁?

在共享内存中初始化 pthread 互斥锁

互斥锁- pthread_mutex

从共享内存同时读取是不是安全?

go channel 也是通过共享内存和互斥锁来实现通信的