「ダブル・チェック・ロッキング」の版間の差分

imported>GamerBook
編集の要約なし
1行目: 1行目:
'''ダブル・チェック・ロッキング'''(英語:Double Check Locking)とは、初回は[[ロック]]なしで状態チェックを行い、そこで必要であれば再度[[ロック]]を掛けたのちに状態チェックを行うという[[ソフトウェア]]の[[最適化]]技法、[[デザインパターン]]のひとつである。
'''ダブル・チェック・ロッキング'''([[英語]]:Double Check Locking)とは、マルチスレッド環境下における[[変数]]に対して、初回は[[ロック]]せず状態チェックを行い、そこで必要であれば再度[[ロック]]を掛けたのちに状態チェックを行うという[[ソフトウェア]]の[[最適化]]技法、[[デザインパターン]]のひとつである。


[[ロック]]は非常に[[オーバーヘッド]]の大きい重い処理であるため、その発生回数を可能な限り減らすことで高速化を実現しようというものである。
[[変数]]の[[ロック]]は非常に[[オーバーヘッド]]の大きい重たい処理であるため、その発生回数を可能な限り減らすことで[[プログラム]]の高速化を実現しようというものである。


ダブル・チェック・ロッキングは、主に[[マルチスレッド]]環境下での[[シングルトンパターン]]を実装する際に[[オーバーヘッド]]の低減を目的として使われることが多い。
ダブル・チェック・ロッキングは、主に[[マルチスレッド]]環境下での[[シングルトンパターン]]を実装する際に[[オーバーヘッド]]の低減を目的として使われることが多い。
76行目: 76行目:


=== Java ===
=== Java ===
[[Java]]では仕様において[[アウトオブオーダー]]を用いるメモリモデルが可能となっていたため、この[[イディオム]]を使うことには問題があり、一部の実装では実際に正しく働かない可能性があることが知られている。詳細は http://www.ibm.com/developerworks/jp/java/library/j-dcl/ を参照。
[[Java]]では[[仕様]]において[[アウトオブオーダー]]を用いるメモリモデルが可能となっていたため、この[[イディオム]]を使うことには問題があり、一部の[[実装]]では実際に正しく働かない可能性があることが知られている。詳細は http://www.ibm.com/developerworks/jp/java/library/j-dcl/ を参照。
 


[[Java]]では絶対にダブルチェックロッキングを使用してはならない。
[[Java]]では絶対にダブルチェックロッキングを使用してはならない。


たとえば以下のような[[Java]]の[[ソースコード]]があったとする。
たとえば以下のような[[Java]]の[[ソースコード]]があったとする。
123行目: 121行目:
== 参考文献 ==
== 参考文献 ==
{{reflist}}
{{reflist}}
== 外部リンク ==


{{stub}}
{{stub}}