国産DIコンテナSeasar その6
■ このスレッドは過去ログ倉庫に格納されています
0679デフォルトの名無しさん
2006/07/08(土) 11:50:54if (checkTarget == null) {
synchronized (〜) {
if (checkTarget == null) {
checkTarget = なんか処理();
}
}
}
とかあった場合に、「なんか処理」がどんなものでも
だめなのか(安全性が保証できないのか)ってこと。
普通のいわゆるdouble-checked lockingの例では、ここが
checkTarget = new CheckClass();
見たいになってるんだけど、この場合はコンストラクタ実行より前に、
checkTargetがnullじゃなくなってしまう可能性を排除できないから問題。
では、「なんか処理」でそういうことが発生しない場合ってのはないの?ということ。
たぶん単純な構造では、最適化によって結局同じことになってしまうのかなとは思うんだけど、
常にだめかというと疑問ってこと。
結局、どのような処理でも、処理完了前に戻りインスタンスの配置が確定して
メモリに反映されてしまう可能性があるのならだめだろうけどね。
■ このスレッドは過去ログ倉庫に格納されています