一、RAII技术
1、 Resource Acquisition Is Initialization,资源获取即初始化,由C++之父提出。
2、 使用局部对象来管理资源的技术,称为资源获取即初始化。
3、 资源主要指操作系统中有限的东西,如内存、套接字等;局部对象指存储在栈里的对象,生命周期由操作系统来管理。
4、 资源使用一般分3个步骤,a、获取资源; b、使用资源; c、销毁资源,但程序员经常忘记销毁资源,所以RAII技术常用于管理资源,避免内存泄露。
5、 RAII过程:
(1)、设计一个类封装资源;
(2)、在构造函数中初始化资源;
(3)、在析构函数中销毁资源;
(4)、使用资源时定义一个该类的对象。
6、 C++11中unique_lock和lock_guard就是运用了RAII技术。
二、lock_guard和unique_lock
1、 程序员在用互斥量mutex的lock()和unlock()时,经常忘记unlock(),导致线程死锁。
2、 lock_guard和unique_lock在构造时自动锁定互斥量,在退出作用域后进行析构时自动解锁互斥量。
3、 lock_guard和unique_lock的区别:
(1)、unique_lock支持临时解锁和再上锁,如定义对象std::unique_lockstd::mutex locker(mtx);后,使用locker.unlock()可以正常解锁,再用locker.lock()进行上锁,不必等到析构时解锁。
(2)、lock_guard不支持手动解锁和上锁,只能在构造时上锁,在析构时解锁。
(3)、unique_lock比lock_guard付出更多时间、性能成本。