C ++ 11の新しいマシンモデルにより、マルチプロセッサシステムが確実に機能するようになります。指示の再編成に。
MeyersとAlexandrescuが指摘したように、「単純な」ダブルチェックロックパターンの実装はC++03では安全ではありません。
Singleton* Singleton::instance() {
if (pInstance == 0) { // 1st test
Lock lock;
if (pInstance == 0) { // 2nd test
pInstance = new Singleton;
}
}
return pInstance;
}
彼らは彼らの記事で、プログラマーとして何をしても、C ++ 03ではコンパイラーの自由度が高すぎることを示しました。つまり、1つだけになるかどうか確信が持てない方法で命令を並べ替えることができます。のインスタンスSingleton。
私の質問は今です:
- 新しいC++11マシンモデルの制限/定義により、命令のシーケンスが制約され、上記のコードは常にC ++ 11コンパイラで機能しますか?
- 安全なC++11-このシングルトンパターンの実装は、(ここのモックの代わりに)新しいライブラリ機能を使用するとどのようになり
Lockますか?