我需要在使用ReaderWriterLockSlim时使用MemoryBarrier吗?

4
似乎mono实现在ReaderWriterLockSlim方法内部没有MemoryBarrier调用。因此,当我在write lock内进行任何更改时,另一个使用read lock的线程可能会接收到旧的缓存值。
这是否真的可能?我应该在Read和Write lock代码内部之前和之后插入MemoryBarrier吗?
2个回答

5

1
有一些CPU具有没有内存屏障的CAS,但它们非常罕见,我认为即使它们也具有带有内存屏障的CAS形式,但只是在您真正想要实现最高并发性时才使用不带内存屏障的CAS。 - Jon Hanna

2
正如Peter所指出的那样,该实现确实引入了内存屏障,只是没有明确说明。
更一般地说:C#语言规范要求某些副作用与锁有良好的顺序。虽然这个规则只适用于使用C# lock语句进入的锁,但是对于提供自定义锁原语的提供者来说,如果他们提供的锁对象不遵循相同的规则,那将会非常奇怪。您明智地进行了双重检查,但通常情况下,您可以假设如果它是线程原语,则已经被设计为确保重要的副作用在其周围得到良好排序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接