Skip to content

Latest commit

 

History

History
78 lines (58 loc) · 2.11 KB

File metadata and controls

78 lines (58 loc) · 2.11 KB

コンストラクタ

  • mutex[meta header]
  • std[meta namespace]
  • scoped_lock[meta class]
  • function[meta id-type]
  • cpp17[meta cpp]
explicit scoped_lock(MutexTypes&... m);               // (1)
explicit scoped_lock(adopt_lock_t, MutexTypes&... m); // (2)

scoped_lock(const scoped_lock&) = delete;             // (3)
  • adopt_lock_t[link /reference/mutex/adopt_lock.md]

概要

  • (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);

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

  } // ロックを手放す
}
  • std::timed_mutex[link /reference/mutex/timed_mutex.md]
  • m1.lock()[link /reference/mutex/mutex/lock.md]
  • m2.lock()[link /reference/mutex/timed_mutex/lock.md]
  • std::adopt_lock[link /reference/mutex/adopt_lock.md]

出力

バージョン

言語

  • C++17

処理系