cpp unique_lock

std::unique_lock use the RAII pattern.
RAII 即 资源获取是初始化(Resource acquisition is initialization),在 RAII 中,持有资源是类不变量,并且与对象生命周期相关联。资源分配(或获取)在对象创建(特别是初始化)期间由构造函数完成,而资源释放(释放)在对象销毁(特别是终结)期间由析构函数完成. 换句话说,资源获取必须成功,初始化才能成功。因此,资源被保证在初始化完成和终结开始之间被持有(持有资源是一个类不变量),并且只在对象处于活动状态时被持有。

上面可以理解为锁会在unique_lock存在范围内有效,一旦unique_lock范围结束,锁会释放。

如果要锁一个mutex变量,要创建一个std::unique_lock的局部变量,mutex作为参数。
unique_lock被创建时mutex会被锁住,unique变量析构时锁会释放。
如果发生了exception, unique_lock也会析构,mutex锁会释放。

示例:
unique_lock的有效范围在block内,block结束时,对my_mutex的锁会释放。

#include<mutex>
int some_shared_var=0;

int func() {
    int a = 3;
    { //Critical section
        std::unique_lock<std::mutex> lock(my_mutex);
        some_shared_var += a;
    } //End of critical section
}        

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值