■74879 / ) |
Re[9]: ヘッダでスレッドセーフなシングルトン |
□投稿者/ キム (45回)-(2015/02/05(Thu) 11:31:30)
|
■No74876 (なちゃ さん) に返信
なちゃさんお返事ありがとうございます。
CPUのアウトオブオーダー実行やコンパイラの最適化によって予想外の動作が行われる可能性があるということでしょうか?
調べてみたら下記の記事を見つけました。
https://msdn.microsoft.com/ja-jp/library/bb310595(VS.85).aspx
この資料によると、 ・x86アーキテクチャが読み込み同士や書き込み同士のリオーダーを行わない。 ・Windows の Interlocked系のすべての関数には、完全なメモリーバリアが使用されている。 ・Visual C++ 2005以降では、volatile 変数の読み取りには Read-Acquire バリア、書き込みには Write-Release バリアが適用される。 となっています。
そのため、スレッドセーフのその2( No74684 のコード)は、『Visual C++ 2005以降でビルドし、Windows上で実行する場合だけ 確実に動作する。それ以外の組み合わせでは、未定義の動作となる可能性がある。』ということでしょうか?
奥が深いですね。勉強になります。
#ごめんなさい、疑問点が出たので一旦解決を解除します。
|
|