ウィキペディアからの正規の壊れたダブルチェックロックのわずかに変更されたバージョン:
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null) {
synchronized(this) {
if (helper == null) {
// Create new Helper instance and store reference on
// stack so other threads can't see it.
Helper myHelper = new Helper();
// Atomically publish this instance.
atomicSet(helper, myHelper);
}
}
}
return helper;
}
}
基盤となるアトミックopsライブラリが適切に機能していると仮定して、新しく作成されたHelperインスタンスをアトミックに公開するだけで、このダブルチェックのロックイディオムが安全になりますか?Javaでは、を使用するだけでよいことを理解してvolatile
いますが、例が疑似Javaであるとしても、これは言語に依存しない質問であると考えられます。
参照: