内存屏障生成器
阅读Joseph Albahari的线程教程 ,以下内容被提及作为内存屏障的生成器:
此外,Hans Passant和Brian Gideon 补充了以下内容 (假设其中没有一个已经适合以前的类别之一):
我想知道这个清单是否完整(如果完整清单甚至可以实际制作)
编辑添加建议:
以下是我对该主题的看法,并尝试在一个答案中提供准完整列表。 如果我遇到任何其他人,我会不时编辑我的答案。
普遍认为会导致隐含障碍的机制:
被推测(但不确定)导致隐含障碍的机制:
其他值得注意的提及:
1 这解释了为什么BackgroundWorker
在CancellationPending
属性的基础字段上没有volatile
的情况下正常工作的原因。
我似乎记得Thread.VolatileRead和Thread.VolatileWrite方法的实现实际上导致完全围栏,而不是半围栏。
这是非常不幸的,因为人们可能在不知不觉中开始依赖这种行为; 他们可能已经编写了一个需要完整围栏的程序,认为他们需要一个半围栏,认为他们正在获得一个半围栏,并且如果这些方法的实施确实提供了半围栏将会出现令人讨厌的惊喜。
我会避免这些方法。 当然,我会避免所有涉及低锁代码的事情,除了最琐碎的情况之外,不能足够智能地将其正确地写入。
volatile
关键字也充当内存屏障。 见https://blogs.msdn.com/b/brada/archive/2004/05/12/130935.aspx
上述就是C#学习教程:内存屏障生成器分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012681.html