¿Necesito MemoryBarrier con ReaderWriterLockSlim?

Parece que la implementación mono no MemoryBarrier llamadas de MemoryBarrier dentro de los métodos de ReaderWriterLockSlim . Por lo tanto, cuando realizo cambios dentro de un write lock , puedo recibir los valores antiguos almacenados en caché en otro hilo que usa un read lock .

¿Es realmente posible? ¿Debo insertar MemoryBarrier antes y después del código dentro del locking de lectura y escritura?

Mirando (lo que creo que es) la fuente mono , el Mono ReaderWriterLockSlim se implementa usando llamadas ReaderWriterLockSlim .

Estas llamadas incluyen una barrera de memoria en x86 , por lo que no es necesario agregar una.

Como señala Peter correctamente, la implementación sí introduce una barrera de memoria, pero no explícitamente.

Más generalmente: la especificación del lenguaje C # requiere que ciertos efectos secundarios estén bien ordenados con respecto a los lockings. Aunque esa regla solo se aplica a los lockings ingresados ​​con la statement de lock C #, sería extremadamente extraño para un proveedor de una primitiva de locking personalizada hacer un objeto de locking que no siga las mismas reglas. Es aconsejable realizar una doble comprobación, pero en general puede suponer que si se trata de una primitiva de subprocesamiento, se ha diseñado para garantizar que los efectos secundarios importantes estén bien ordenados.