Skip to content

Latest commit

 

History

History
62 lines (46 loc) · 1.65 KB

adopt_lock.md

File metadata and controls

62 lines (46 loc) · 1.65 KB

adopt_lock

  • mutex[meta header]
  • std[meta namespace]
  • class[meta id-type]
  • cpp11[meta cpp]
namespace std {
  struct adopt_lock_t { };
  constexpr adopt_lock_t adopt_lock { };        // C++11
  inline constexpr adopt_lock_t adopt_lock { }; // C++17
}

概要

adopt_lock_t型とその値adopt_lockは、ロック済みミューテックスを受け取るためのタグである。

lock()/unlock()の呼び出しをRAIIで自動化するunique_lockクラスおよびlock_guardクラスのコンストラクタでlock()を呼び出さず、ロックの所有権を委譲するために使用する。

defer_lockとの違いは、unique_lock::owns_lock() == trueになることである。

#include <iostream>
#include <mutex>

int main()
{
  std::mutex mtx;
  {
    mtx.lock(); // ロックを取得する
    std::unique_lock<std::mutex> lk(mtx, std::adopt_lock); // ロック済みミューテックスの管理を委譲する

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

  } // unique_lockの破棄時にunlock()される
}
  • std::adopt_lock[color ff0000]
  • mtx.lock()[link mutex/lock.md]
  • std::unique_lock[link unique_lock.md]

出力

バージョン

言語

  • C++11

処理系

  • Clang: ??
  • GCC: 4.7.0
  • ICC: ??
  • Visual C++: 2012, 2013, 2015
    • 2012, 2013はconstexprが実装されていないため、代わりにadopt_lockにはconstが修飾されている。

参照