. @Cryolite @SubaruG マルチスレッドでも安全な「immutableオブジェクト」を実現する方法は、Javaのメモリモデルを定義する際の重要なテーマの一つでした。そこでの議論はC++0xなどにも強く影響しているようです。
2010-04-13 02:01:48@yamasa 僕が想定しているのは、あくまで、さっき挙げたレベルでのスレッド安全性を、型レベルで行えたらうれしいなー、程度のもんです。
2010-04-13 02:04:03@yamasa 具体的に C++0x のどの部分に影響しているのか,とかご存知でしたら教えていただけますでしょうか? RT そこでの議論はC++0xなどにも強く影響しているようです。
2010-04-13 02:05:08@Cryolite data-dependency orderingとかですね。Javaのfinalフィールドの実装は、C++0x的に言うとコンストラクタの最後でreleaseバリアを発行し、…
2010-04-13 02:12:44厳密に~である保証をコンパイラ側にしてもらう、というより、~でなければならない、さもなくば未定義である、って方がC++らしい気がする。
2010-04-13 02:16:30@Cryolite つまり、Javaのfinalと同じセマンティクスを実現しようとすると、memory_order_consume 相当のメモリバリアを暗黙的にあちこちで発行しなければならないので、C++0xでは採用されなかったんでしょう。
2010-04-13 02:16:43@SubaruG スレッド安全性が型システムの中に組み込まれていれば嬉しいな、とは私も思います。ただ、それはゼロオーバーヘッド原則との両立がとても難しいと思っています。
2010-04-13 02:20:04@yamasa コンパイラがチェックをしようとすると大変ですけど、ユーザが宣言する形で使うのであれば、特にオーバーヘッドは起きないと思うのですが、どうでしょう。
2010-04-13 02:21:44@yamasa 丁寧に説明してくださってありがとうございます.おおよそ自分の理解が合っているっぽい気がしないでもないということが確認できました.
2010-04-13 02:22:29物理的に const ってことは要するに、内部状態も書き換えないし、グローバル環境も書き換えない、ってことですよね。
2010-04-13 02:28:42MyClass x; inter_thread_ptr = &x; // inter_thread_ptr に代入されたアドレスが 可視な状況であっても, x の初期化に関する可視性の保証は別問題.
2010-04-13 02:32:19