C++多线程:探究std::unique_lock类
在C++多线程的开发当中,为了保证线程之间的互斥访问,我们需要使用锁(lock)机制。std::unique_lock类是C++11标准库提供的一种锁的实现方式,拥有更加灵活的特性和更强大的功能。
一、基本用法
std::unique_lock的基本用法就是将其作为传入锁的类型,例如:
std::mutex mtx;
{
std::unique_lock<std::mutex> lck(mtx);
// 临界区代码
}
在这个例子中,使用std::unique_lock包含了需要保护的互斥量mtx,并且将std::unique_lock对象命名为lck。在这个代码块中,只有当std::unique_lock对象lck被销毁时,才会释放互斥量mtx的锁。
二、延迟加锁
std::unique_lock不仅支持在构造函数中加锁,还支持在后续的代码逻辑中再加锁。例如:
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx, std::defer_lock);
// some code
lck.lock();
// critical section code
这里的std::def