unique_lock
是管理具有唯一所有权的互斥对象的对象。类似智能指针unique_ptr
。在构造时(或通过移动分配给它),对象获得一个互斥对象,负责该对象的锁定和解锁操作。该对象支持两种状态:锁定和解锁。此类保证在销毁时将管理的互斥对象解锁(即使未显式调用解锁函数)。因此,它能够保证互斥对象在抛出异常的情况下正确解锁,克服了mutex使用中的缺点。但是,unique_lock对象不以任何方式管理互斥对象的生命周期:这要求互斥对象的持续时间应至少延长到管理它的unique_lock销毁。
unique_lock
是一个模板类,需要使用Mutex类型作为模板参数。
try_lock
初始化: 新创建的unique_lock
对象管理Mutex
对象m
,并尝试调用m.lock()
对Mutex
对象进行上锁,如果此时另外某个unique_lock
对象已经管理了该Mutex
对象m
,则当前线程将会被阻塞。try-locking
初始化: 新创建的unique_lock
对象管理Mutex对象m,并尝试调用m.try_lock()对Mutex对象进行上锁,但如果上锁不成功,并不会阻塞当前线程
1 | boost::mutex mut; |