• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    function
    <mutex>

    std::unique_lock::release

    mutex_type* release() noexcept;
    

    概要

    ミューテックスの所有権を放棄する。

    この関数を実行することで、unique_lockオブジェクトはミューテックスのアンロック責任を放棄する。この関数を実行したユーザーは、自分でミューテックスをアンロックする必要がある。

    事後条件

    • 保持しているミューテックスオブジェクトへのポインタがNULLになること
    • owns_lock() == falseになること

    戻り値

    保持しているミューテックスオブジェクトへのポインタを返す

    例外

    投げない

    #include <iostream>
    #include <thread>
    #include <mutex>
    
    class X {
      int value_ = 0;
      mutable std::mutex mtx_;
    public:
      void add_value()
      {
        std::unique_lock<std::mutex> lk(mtx_);
    
        ++value_;
    
        std::mutex* m = lk.release(); // ミューテックスの所有権を放棄する
        m->unlock(); // 手動でロックを手放す
      }
    
      int get() const
      {
        std::lock_guard<std::mutex> lk(mtx_);
        return value_;
      }
    };
    
    int main()
    {
      X x;
    
      std::thread t1([&] { x.add_value(); });
      std::thread t2([&] { x.add_value(); });
    
      t1.join();
      t2.join();
    
      std::cout << x.get() << std::endl;
    }
    

    出力

    2
    

    バージョン

    言語

    • C++11

    処理系

    参照