• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    class
    <mutex>

    std::mutex

    namespace std {
      class mutex;
    }
    

    概要

    mutexは、スレッド間で使用する共有リソースを排他制御するためのクラスである。lock()メンバ関数によってリソースのロックを取得し、unlock()メンバ関数でリソースのロックを手放す。

    このクラスのデストラクタは自動的にunlock()メンバ関数を呼び出すことはないため、通常このクラスのメンバ関数は直接は呼び出さず、lock_guardunique_lockといったロック管理クラスと併用する。

    メンバ関数

    名前 説明 対応バージョン
    (constructor) コンストラクタ C++11
    (destructor) デストラクタ C++11
    operator=(const mutex&) = delete; 代入演算子 C++11
    lock ロックを取得する C++11
    try_lock ロックの取得を試みる C++11
    unlock ロックを手放す C++11
    native_handle ミューテックスのハンドルを取得する C++11

    メンバ型

    名前 説明 対応バージョン
    native_handle_type 実装依存のハンドル型 C++11

    #include <iostream>
    #include <thread>
    #include <mutex>
    #include <vector>
    
    class X {
      std::mutex mtx_;
      std::vector<int> data_;
    public:
      // vectorオブジェクトへのアクセスを排他的にする
      void add_value(int value)
      {
        std::lock_guard<std::mutex> lock(mtx_);
        data_.push_back(value);
      }
    
      void print()
      {
        for (int x : data_) {
          std::cout << x << std::endl;
        }
      }
    };
    
    int main()
    {
      X x;
    
      std::thread t1([&x]{ x.add_value(1); });
      std::thread t2([&x]{ x.add_value(2); });
    
      t1.join();
      t2.join();
    
      x.print();
    }
    

    出力

    1
    2
    

    バージョン

    言語

    • C++11

    処理系

    参照