差分

ナビゲーションに移動 検索に移動

ダブル・チェック・ロッキング

88 バイト追加, 2014年10月26日 (日) 01:29
編集の要約なし
'''ダブル・チェック・ロッキング'''(英語:Double ([[英語]]:Double Check Locking)とは、初回はLocking)とは、マルチスレッド環境下における[[変数]]に対して、初回は[[ロック]]なしで状態チェックを行い、そこで必要であれば再度せず状態チェックを行い、そこで必要であれば再度[[ロック]]を掛けたのちに状態チェックを行うという[[ソフトウェア]]の[[最適化]]技法、[[デザインパターン]]のひとつである。
[[変数]]の[[ロック]]は非常に[[オーバーヘッド]]の大きい重い処理であるため、その発生回数を可能な限り減らすことで高速化を実現しようというものである。の大きい重たい処理であるため、その発生回数を可能な限り減らすことで[[プログラム]]の高速化を実現しようというものである。
ダブル・チェック・ロッキングは、主に[[マルチスレッド]]環境下での[[シングルトンパターン]]を実装する際に[[オーバーヘッド]]の低減を目的として使われることが多い。
=== Java ===
[[Java]]では仕様においてでは[[仕様]]において[[アウトオブオーダー]]を用いるメモリモデルが可能となっていたため、この[[イディオム]]を使うことには問題があり、一部の実装では実際に正しく働かない可能性があることが知られている。詳細は を使うことには問題があり、一部の[[実装]]では実際に正しく働かない可能性があることが知られている。詳細は http://www.ibm.com/developerworks/jp/java/library/j-dcl/ を参照。 
[[Java]]では絶対にダブルチェックロッキングを使用してはならない。
 
たとえば以下のような[[Java]]の[[ソースコード]]があったとする。
== 参考文献 ==
{{reflist}}
 
== 外部リンク ==
 
{{stub}}
匿名利用者

案内メニュー