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