文章

std::lock_guard 简单用法

std::lock_guard 是 c++ 标准库中的 RAII 类模板,用于在作用域内自动管理互斥量的上锁和解锁操作,确保在离开作用域时正确释放互斥量,避免忘记解锁而导致的死锁问题。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <mutex>
#include <iostream>

std::mutex mtx;

// 使用 lock_guard 前 unlock无法被调用
# if 0
void test_lock()
{
    mtx.lock();
    if (true)
    {
        std::cout << "exit \n";
        mtx.unlock();
        return;
    }
    mtx.unlock();
}
#endif

// 使用 lock_guard 后不用担心 未 unlock 的问题
void test_lock()
{
    std::lock_guard<std::mutex> glck(mtx);
    if (true)
    {
        std::cout << "exit" << std::endl;
        return;
    }
}

int main()
{
    test_lock();
    return 0;
}
本文由作者按照 CC BY 4.0 进行授权

© ziqing. 保留部分权利。

纸上得来终觉浅,绝知此事要躬行!