◐ Shell
clean mode source ↗

std::lock_guard - cppreference.com

提供: cppreference.com

<tbody> </tbody>

template< class Mutex > class lock_guard;

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

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

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

テンプレート引数

メンバ型

メンバ関数

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

関連項目