最終更新:2021-01-04 (月) 20:00:45 (1210d)  

std::lock_guard
Top / std::lock_guard

ミューテックスのlock()/unlock()処理をコンストラクタとデストラクタで確実に実行するためのクラス

https://cpprefjp.github.io/reference/mutex/lock_guard.html

使い方

  • ロック対象の型をTに指定してコンストラクタに対象のオブジェクトを渡す
    std::mutex mtx;
    std::lock_guard(std::mutex) lock(mtx);
  • スコープを抜けるときにデストラクタが呼ばれロックが開放される

メモ

  • このクラスは通常、メンバ変数もしくはグローバル変数としてもつミューテックスオブジェクトに対し
    • ブロックスコープの先頭でlock()を呼び出し
    • 同ブロックスコープを抜ける際にunlock()を確実に呼び出すために使用される。
  • この手法は、Scoped Locking Patternとして知られている。

機能

  • コンストラクタでロックを取得/ロック済みミューテックスを受け取る
  • デストラクタでロックを手放す

より高度な操作

  • std::unique_lock?

C++17

  • std::scoped_lock?