• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <mutex>

    std::scoped_lock::コンストラクタ

    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

    処理系