我是否需要使用ReaderWriterLockSlim的MemoryBarrier?
看起来单声道实现在ReaderWriterLockSlim
方法中没有MemoryBarrier
调用。 因此,当我在write lock
内进行任何更改时,我可以在另一个使用read lock
线程中接收旧的缓存值。
真的有可能吗? 我应该在读写锁定内的代码之前和之后插入MemoryBarrier
吗?
看看(我认为) 单声道源 , Mono ReaderWriterLockSlim
是使用Interlocked
调用实现的。
这些调用包括x86上的内存屏障 ,因此您不需要添加一个。
正如Peter正确指出的那样,实现确实引入了一个内存屏障,而不是明确的。
更一般地说:C#语言规范要求在锁定方面有一定的副作用。 虽然该规则仅适用于使用C# lock
语句输入的lock
,但对于自定义锁定基元的提供程序来说,制作不遵循相同规则的锁定对象会非常奇怪。 你仔细检查是明智的,但一般来说你可以假设,如果它是一个线程原语,那么它的设计是为了确保重要的副作用在它周围有序。