C 11的新机型允许多处理器系统可靠地工作,wrt.重组指令.
正如Meyers和Alexandrescu所指出的那样,C 03中的“简单”双重锁定模式的实现是不安全的
Singleton* Singleton::instance() { if (pInstance == 0) { // 1st test Lock lock; if (pInstance == 0) { // 2nd test pInstance = new Singleton; } } return pInstance; }
他们在their article表示,无论你做什么作为程序员,在C 03编译器有太多的自由:允许重新排序指令,你不能确定你最终只有一个Singleton实例.
我现在的问题是:
>新的C11机器模型的限制/定义现在约束了指令序列,上述代码将始终与C 11编译器一起使用?
>如何使用新的图书馆设施(而不是这里的模拟锁),这个Singleton模式的安全性如何呢?