【发布时间】:2016-09-20 19:46:33
【问题描述】:
如果我理解正确,在 C# 中,lock 块保证对一组指令的独占访问,但它也保证从内存中读取的任何内容都会反映任何 CPU 缓存中该内存的最新版本。我们将lock 块视为保护块内读取和修改的变量,这意味着:
- 假设您已在必要时正确实施锁定,则这些变量一次只能由一个线程读取和写入,并且
-
lock块中的读取会看到变量的最新版本,lock块中的写入对所有线程都可见。
(对吗?)
第二点是我感兴趣的。是否有某种魔法可以保证只有在受lock 块保护的代码中读取和写入的变量 是新鲜的,或者在lock 的实现中使用的内存屏障保证所有 内存现在对所有线程都一样新鲜?请原谅我对缓存如何工作的心理模糊,但我读过缓存包含几个多字节“行”数据。我想我要问的是,内存屏障是否强制同步所有“脏”缓存行或只是一些,如果只是一些,是什么决定了哪些行得到同步?
【问题讨论】:
标签: c# multithreading