Gaz*_*yer 6 c# memory multithreading locking
我正在阅读这篇关于无锁线程同步的MSDN文章.这篇文章似乎推断,只要你在访问共享变量之前输入一个锁,那么这些变量将是最新的(至少在.Net 2.0中).
我想到这是怎么可能的?.Net中的锁只是所有线程在访问内存之前检查的任意对象,但锁本身并不知道正在访问的内存位置.
如果我有一个线程更新变量,甚至整个内存块,那么当进入/退出锁时,这些更新如何保证从CPU缓存中刷新?所有内存访问是否在锁内有效地变为易失性?
检查Eric Lippert的工作:http://blogs.msdn.com/b/ericlippert/archive/2011/06/16/atomicity-volatility-and-immutability-are-different-part-three.aspx
锁定保证锁内部读取或修改的内存一致,锁定保证一次只有一个线程访问给定的内存块,依此类推.
所以,是的,只要您在访问共享资源之前每次都锁定,您就可以非常确定它是最新的
编辑查看以下帖子以获取更多信息和非常有用的概述:http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/