首页 / 软件开发 / .NET编程技术 / Memory Reordering/Memory Model及其对.NET的影响
Memory Reordering/Memory Model及其对.NET的影响2010-11-18 cnblogs Jeffrey Sun关于内存模型, 这实在是个被说烂了的话题. 五六年前刚刚接触到的时候 , 各路大牛就开始讨论了. 还记得那时候每每带着无比崇敬的心去阅读那些文字 和思想. 之后每每回头去重读那些文字,更感觉收获颇多. 可是大牛们往往言语颇 为简概, 所以尽管读的次数多, 但是多数成为时间和差记忆力的受害者屡屡忘记. 所以最近下定决心, 写这样一篇博文, 汇总各路豪杰之思想, 聚集近几年之结论, 加上笔者一点微不足道的收获, 务求准确翔实, 希望图文并茂. 程序员帮程序员, 大家互助.是为题记.不知道作为程序员的您想过没有, 如果CPU不是按照您的程序写那样的顺序 (Programming Order)执行, 结果会是怎样的? 如果您以前没有意识到这一点, 您 可能会比较震惊. 但在进入多核心多处理器时代之后,事实上就是这样的, CPU会 调整指令执行的顺序, 并以调整后的顺序(Processer Order)来执行指令. 这是提 高CPU执行效率的重要措施.除了极少数人比如.NET框架的设计者们在很早的时间就遇到了这个问题, 撇开 C++/JAVA程序员们不谈, 我猜测很多.NET程序员首次意识到这个问题, 应该是当 Double-Check遇到了单例模型的实现:Imperfect Singleton Implement1. public class Singleton
2. {
3. private static object syncRoot = new object();
4. private Singleton instance;
5.
6. private Singleton() { }
7.
8. public Singleton Instance
9. {
10. get
11. {
12. if (instance == null)
13. {
14. lock (syncRoot)
15. {
16. if (instance == null)
17. {
18. instance = new Singleton ();
19. }
20. }
21. }
22.
23. return instance;
24. }
25. }
26. }