lock_guard
管理类
#include <mutex>
template< class Mutex >
class lock_guard;
类 lock_guard 是互斥体包装器,为在作用域块期间占有互斥提供便利 RAII 风格机制。
创建 lock_guard 对象时,它试图接收给定互斥的所有权。控制离开创建 lock_guard 对象的作用域时,销毁 lock_guard 并释放互斥。
lock_guard 类不可复制。
模板形参
Mutex - 要锁定的互斥。
成员类型
成员类型 | 定义 |
---|---|
mutex_type | Mutex |
构造函数
构造新的 mutex 对象。
explicit lock_guard( mutex_type& m );
lock_guard( mutex_type& m, std::adopt_lock_t t );
lock_guard( const lock_guard& ) = delete;
获得给定互斥 m 的所有权。
- 等效地调用 m.lock() 。
- 获得互斥 m 的所有权而不试图锁定它。若当前线程不在 m 上保有非共享锁(即由 lock、 try_lock、 try_lock_for 或 try_lock_until 取得的锁)则行为未定义。
- 复制构造函数被删除。 若在 m 先于 lock_guard 对象被销毁,则行为未定义。
- 参数 m - 要获得所有权的共享互斥 t - 用于选择构造函数非锁定版本的标签参数
析构函数
销毁 lock_guard 对象。
~lock_guard();
释放所占有互斥的所有权。
等效地调用 m.unlock() ,其中 m 是传递个 lock_guard 的构造函数的互斥。
复制函数(删除)
unique_lock
管理类
#include <mutex>
template< class Mutex >
class unique_lock;
类 unique_lock 是通用互斥包装器,允许延迟锁定、锁定的有时限尝试、递归锁定、所有权转移和与条件变量一同使用。
类 unique_lock 可移动,但不可复制——它满足可移动构造 和可移动赋值 但不满足可复制构造 或可复制赋值 。
类 unique_lock 满足基本可锁定 要求。若 Mutex 满足可锁定要求,则 unique_lock 亦满足可锁定要求(例如:能用于 std::lock ) ;若 Mutex 满足可定时锁定要求,则 unique_lock 亦满足可定时锁定要求。
模板形参
Mutex - 要锁定的互斥。
成员类型
成员类型 | 定义 |
---|---|
mutex_type | Mutex |
构造函数
构造新的 mutex 对象。
unique_lock() noexcept;
unique_lock( unique_lock&& other ) noexcept;
explicit unique_lock( mutex_type& m );
unique_lock( mutex_type& m, std::defer_lock_t t ) noexcept;
unique_lock( mutex_type& m, std::try_to_lock_t t );
unique_lock( mutex_type& m, std::adopt_lock_t t );
template< class Rep, class Period >
unique_lock( mutex_type& m,
const std::chrono::duration<Rep,Period>& timeout_duration );
template< class Clock, class Duration >
unique_lock( mutex_type& m,
const std::chrono::time_point<Clock,Duration>& timeout_time );
构造 unique_lock ,可选地锁定提供的互斥。
- 构造无关联互斥的 unique_lock 。
- 移动构造函数。以 other 的内容初始化 unique_lock 。令 other 无关联互斥。 3-8. 构造以 m 为关联互斥的 unique_lock 。另外:
- 通过调用 m.lock() 锁定关联互斥。
- 不锁定关联互斥。
- 通过调用 m.try_lock() 尝试锁定关联互斥而不阻塞。若 Mutex 不满足可锁定 (Lockable) 则行为未定义。
- 假定调用方线程已保有 m 上的非共享锁(即由 lock、 try_lock、 try_lock_for 或 try_lock_until 取得的锁)。若非如此则行为未定义。
- 通过调用 m.try_lock_for(timeout_duration) 尝试锁定关联互斥。阻塞到经过指定的 timeout_duration 或获得锁这两个事件的先到来者为止。可能阻塞长于 timeout_duration 。若 Mutex 不满足可定时锁定 (TimedLockable) 则行为未定义。
- 通过调用 m.try_lock_until(timeout_time) 尝试锁定关联互斥。阻塞到抵达指定的 timeout_time 或获得锁这两个事件的先到来者为止。可能阻塞长于抵达 timeout_time 。若 Mutex 不满足可定时锁定 (TimedLockable) 则行为未定义。
- 参数 other - 用以初始化状态的另一 unique_lock m - 与锁关联且可选的获得所有权的互斥 t - 用于选择拥有不同锁定策略的构造函数的标签参数 timeout_duration - 要阻塞的最大时长 timeout_time - 要阻塞到的最大时间点
析构函数
销毁 lock_guard 对象。
~lock_guard();
释放所占有互斥的所有权。
等效地调用 m.unlock() ,其中 m 是传递个 lock_guard 的构造函数的互斥。