最終更新日時(UTC):
が更新

履歴 編集

function
<mutex>

std::scoped_lock::コンストラクタ(C++17)

explicit scoped_lock(MutexTypes&... m);               // (1)
explicit scoped_lock(adopt_lock_t, MutexTypes&... m); // (2)

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

概要

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

効果

  • (1) : MutexTypes...が空であればなにもしない。単一要素であればm.lock()を呼び出し、そうでなければlock(m...)を呼び出す。

例外

  • (2) : 投げない

#include <iostream>
#include <mutex>

int main()
{
  std::mutex m1;
  std::timed_mutex m2;

  // (1)
  {
    // m1とm2のロックを取得
    std::scoped_lock<std::mutex, std::timed_mutex> lk{m1, m2};

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

  } // ロックを手放す

  // (2)
  {
    m1.lock();
    m2.lock();

    // ロック取得済みのミューテックスを、std::scoped_lockに管理させる
    std::scoped_lock lk(std::adopt_lock, m1, m2);

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

  } // ロックを手放す
}

出力

バージョン

言語

  • C++17

処理系