タグ

double_checked_locking_patternに関するmrknのブックマーク (1)

  • C++0x時代の Double-Checked Locking - yamasaのネタ帳

    今回は "Double-Checked Locking" (以下DCL)というマルチスレッドプログラム向けのイディオムを例にして、C++0xの(低レイヤ向け)マルチスレッド機能の利用方法を紹介してみます。 DCLとは、「ロック→条件判定」というロジックを「条件判定→ロック→(再度)条件判定」と書き換えるイディオムで、主に遅延初期化などの処理においてロックのオーバーヘッドを減らすために用いられます。DCLはシンプルかつ効果の高いイディオムだったので、一時期もてはやされました。ところが、DCLはコンパイラやCPUによるリオーダーの影響により正しく動作しない場合があることがわかったため(参考1、参考2)、今ではアンチパターンと呼ばれることすらある始末です。 しかし、DCLの問題点は、メモリモデルに関する知識があまり知られていなかったことと、プログラミング言語の仕様でメモリモデルが正しく定義されて

    C++0x時代の Double-Checked Locking - yamasaのネタ帳
    mrkn
    mrkn 2011/03/01
    "atomic変数とメモリバリアがきちんと定義されている C++0x では、DCLを正しく実装することが可能になった"
  • 1