「ダブル・チェック・ロッキング」の版間の差分
imported>Administrator 編集の要約なし |
imported>Administrator 編集の要約なし |
||
| 1行目: | 1行目: | ||
'''ダブル・チェック・ロッキング'''([[英語]]:double check | '''ダブル・チェック・ロッキング'''([[英語]]:double check locking)とは、[[マルチスレッド]]環境下における[[変数]]に対して、初回は[[ロック]]せず状態チェックを行い、そこで必要であれば再度[[ロック]]を掛けた後に状態チェックを行うという[[ソフトウェア]]の[[最適化]]技法、[[デザインパターン]]のひとつである。 | ||
[[ | ==概要== | ||
ダブル・チェック・ロッキングは、主に[[マルチスレッド]]環境下での[[シングルトンパターン]]を実装する際に[[オーバーヘッド]]の低減を目的として使われることが多い。 | |||
マルチスレッド下における[[変数]]の[[ロック]]は非常に[[オーバーヘッド]]が大きくスレッド数に比例して重くなる。ダブル・チェック・ロッキングはそのような状況下でロックの発生回数を可能な限り減らすことで[[プログラム]]の高速化を実現しようというものである。なお、シビアな速度を要求されないのであれば[[ソースコード]]としては何も考えず常にロックした方が簡潔明瞭ではある。 | |||
== 主なプログラミング言語での実装例 == | == 主なプログラミング言語での実装例 == | ||
| 44行目: | 45行目: | ||
=== C# (Lazy) === | === C# (Lazy) === | ||
[[.NET Framework 4.0]] | [[.NET Framework 4.0]]から標準でLazy<T>クラス(System名前空間)が用意されており、これを使うことで簡潔明瞭にダブル・チェック・ロッキングを記述できるようになった<!--<ref>{{cite | ||
|title=C# 4.0 in a Nutshell | |title=C# 4.0 in a Nutshell | ||
|last=Albahari | |last=Albahari | ||