Dig*_*ers 1 c# multithreading locking memory-model shared-memory
c#内存模型是否保证持有锁的线程能够保证在任何其他线程先前保持相同锁定时看到所执行的所有更新?
我一直在阅读c#规范,但似乎无法找到相关的细节.
寻求直观的解释:如果没有提供保证,那么你就无法实现锁定.
寻求正式解释:CLI规范(Ecma 335),第I.12.6.5章介绍了这一点:
获取锁(System.Threading.Monitor.Enter或输入同步方法)应隐式执行易失性读操作,释放锁(System.Threading.Monitor.Exit或保留同步方法)将隐式执行易失性写操作.
易失性读取具有"获取语义",这意味着保证在CIL指令序列中的读取指令之后发生的对存储器的任何引用之前发生读取.易失性写入具有"释放语义",这意味着写入保证在CIL指令序列中的写入指令之前的任何存储器引用之后发生.