我是否需要使用ReaderWriterLockSlim的MemoryBarrier?

看起来单声道实现在ReaderWriterLockSlim方法中没有MemoryBarrier调用。 因此,当我在write lock内进行任何更改时,我可以在另一个使用read lock线程中接收旧的缓存值。

真的有可能吗? 我应该在读写锁定内的代码之前和之后插入MemoryBarrier吗?

看看(我认为) 单声道源 , Mono ReaderWriterLockSlim是使用Interlocked调用实现的。

这些调用包括x86上的内存屏障 ,因此您不需要添加一个。

正如Peter正确指出的那样,实现确实引入了一个内存屏障,而不是明确的。

更一般地说:C#语言规范要求在锁定方面有一定的副作用。 虽然该规则仅适用于使用C# lock语句输入的lock ,但对于自定义锁定基元的提供程序来说,制作不遵循相同规则的锁定对象会非常奇怪。 你仔细检查是明智的,但一般来说你可以假设,如果它是一个线程原语,那么它的设计是为了确保重要的副作用在它周围有序。