Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 1.95 KB

try_to_lock.md

File metadata and controls

65 lines (52 loc) · 1.95 KB

try_to_lock

  • mutex[meta header]
  • std[meta namespace]
  • class[meta id-type]
  • cpp11[meta cpp]
namespace std {
  struct try_to_lock_t { explicit try_to_lock_t() = default; };
  constexpr try_to_lock_t try_to_lock { };        // C++11
  inline constexpr try_to_lock_t try_to_lock { }; // C++17
}

概要

try_to_lock_t型とその値try_to_lockは、遅延ロックのためのタグである。

lock()/unlock()の呼び出しをRAIIで自動化するunique_lockクラスのコンストラクタでlock()の代わりにtry_lock()を呼び出すために使用する。

#include <iostream>
#include <mutex>

int main()
{
  std::mutex mtx;
  {
    std::unique_lock<std::mutex> lk(mtx, std::try_to_lock); // lock()の代わりにtry_lock()を呼び出す
    if (!lk) {
      // ロックの取得に失敗
      std::error_code ec(static_cast<int>(std::errc::device_or_resource_busy), std::generic_category());
      throw std::system_error(ec);
    }

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

  } // unique_lockの破棄時にunlock()される
}
  • std::try_to_lock[color ff0000]
  • std::unique_lock[link unique_lock.md]
  • std::errc::device_or_resource_busy[link /reference/system_error/errc.md]
  • std::generic_category()[link /reference/system_error/generic_category.md]
  • std::system_error[link /reference/system_error/system_error.md]

出力

バージョン

言語

  • C++11

処理系

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

参照