名前空間
変種

std::lock_guard

提供: cppreference.com
 
 
スレッドサポートライブラリ
スレッド
(C++11)
(C++20)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
 
<tbody> </tbody>
ヘッダ <mutex> で定義
template< class Mutex > class lock_guard;

クラス lock_guard はスコープ付きブロックの期間に対してミューテックスを所有するための便利な RAII スタイルの仕組みを提供するミューテックスラッパーです。

lock_guard オブジェクトが作成されると、指定されたミューテックスの所有権の取得が試みられます。 lock_guard オブジェクトが作成されたスコープから制御が離れると、 lock_guard は破壊され、ミューテックスは解放されます。

lock_guard クラスはコピー可能ではありません。

テンプレート引数

Mutex - ロックするミューテックスの型。 BasicLockable の要件を満たさなければなりません

メンバ型

メンバ型 定義
mutex_type Mutex

メンバ関数

lock_guard を構築し、オプションで指定されたミューテックスをロックします
(パブリックメンバ関数) [edit]
lock_guard オブジェクトを破壊し、ミューテックスのロックを解除します
(パブリックメンバ関数) [edit]
operator=
[削除]
コピー代入可能ではありません
(パブリックメンバ関数) [edit]

#include <thread>
#include <mutex>
#include <iostream>

int g_i = 0;
std::mutex g_i_mutex;  // protects g_i

void safe_increment()
{
    const std::lock_guard<std::mutex> lock(g_i_mutex);
    ++g_i;

    std::cout << std::this_thread::get_id() << ": " << g_i << '\n';

    // g_i_mutex is automatically released when lock
    // goes out of scope
}

int main()
{
    std::cout << "main: " << g_i << '\n';

    std::thread t1(safe_increment);
    std::thread t2(safe_increment);

    t1.join();
    t2.join();

    std::cout << "main: " << g_i << '\n';
}

出力例:

main: 0
140641306900224: 1
140641298507520: 2
main: 2

欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2981 C++17 redundant deduction guide from lock_guard<Mutex> was provided removed

関連項目

ムーブ可能なミューテックスの所有権のラッパーを実装します
(クラステンプレート) [edit]
複数のミューテックスに対するデッドロック回避機能付きの RAII ラッパー
(クラステンプレート) [edit]