名前空間
変種
操作

std::lock_guard

提供: cppreference.com
< cpp‎ | thread
 
 
スレッドサポートライブラリ
スレッド
(C++11)
(C++20)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
汎用ロック管理
lock_guard
(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)
 
 
ヘッダ <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]
close