我需要带ReaderWriterLockSlim的MemoryBarrier吗?

时间:2013-12-13 10:42:24

标签: c# multithreading asynchronous thread-safety

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

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

2 个答案:

答案 0 :(得分:5)

查看(我认为是)the mono source Mono ReaderWriterLockSlim是使用Interlocked调用实现的。

这些来电include a memory barrier on x86,所以您不需要添加一个。

答案 1 :(得分:2)

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

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