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

本文介绍了C++中的RAII(Resource Acquisition Is Initialization)原则,通过std::unique_lock来管理和控制互斥锁(mutex)。在RAII中,资源的生命周期与对象的生命周期绑定,确保在对象创建时获取资源,在对象销毁时释放资源。在示例中,std::unique_lock在代码块内有效,用于保护共享变量的安全访问,当退出代码块时,锁会自动释放,避免了资源泄露。这种方式在异常安全性和内存管理上具有显著优势。
最低0.47元/天 解锁文章
1829

被折叠的 条评论
为什么被折叠?



