最終更新日時:
が更新

履歴 編集

function
<mutex>

std::lock_guard::コンストラクタ(C++11)

explicit lock_guard(mutex_type& m);      // (1)
lock_guard(mutex_type& m, adopt_lock_t); // (2)

lock_guard(lock_guard const&) = delete;  // (3)

概要

  • (1) : 非ロック状態のミューテックスオブジェクトへの参照を受け取り、メンバ変数として参照を保持する。
  • (2) : ロック済みミューテックスオブジェクトへの参照を受け取り、メンバ変数として参照を保持する。
  • (3) : コピーコンストラクタ。コピー不可。非自明なコンストラクタが定義されているため、ムーブコンストラクタは定義されない

効果

  • (1) : m.lock()

例外

  • (2) : 投げない

#include <iostream>
#include <mutex>

int main()
{
  std::mutex mtx;

  {
    std::lock_guard<std::mutex> lk(mtx); // ロックを取得する

    // ...共有リソースにアクセス...

  } // ロックを手放す

  {
    mtx.lock();
    std::lock_guard<std::mutex> lk(mtx, std::adopt_lock); // ロック済みミューテックスを渡す

    // ...共有リソースにアクセス...

  } // ロックを手放す
}

出力

バージョン

言語

  • C++11

処理系

  • Clang: ??
  • GCC:
  • GCC, C++11 mode: 4.7.0
  • ICC: ??
  • Visual C++: 11.0, 12.0, 14.0
    • Visual C++ 11.0はコピーコンストラクタのdeleteに対応していないため、代わりにprivateで宣言のみ行う手法で代用されている。

参照