仅读取共享内存时的互斥锁
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 都将数据竞争定义为通过多个执行上下文访问内存位置,而无需排序,其中至少一个访问是写入。如果你没有写,你就没有种族。
【讨论】:
以上是关于仅读取共享内存时的互斥锁的主要内容,如果未能解决你的问题,请参考以下文章