【C++新经典】【并发与多线程】6 unique_lock 详解

1 unique_lock

unique_lock 比 lock_guard 灵活,但是效率差。

unique_lock my_uni_lock(my_mutex);

2 unique_lock 的第二个参数

2.1 std::adopt_lock

互斥量已经被 lock(),不需要在构造函数中 lock。

2.2 std::try_to_lock

如果没有锁定成功,会立即返回,不会阻塞。

owns_locks() 方法判断是否拿到锁,如拿到锁则返回true。

2.3 std::defer_lock

初始化一个没有加锁的 mutex。

3 unique_lock 的成员函数

3.1 lock()

unique_lock my_uni_lock(my_mutex, defer_lock);
my_uni_lock.lock();

3.2 unlock()

unique_lock my_uni_lock(my_mutex, defer_lock);
my_uni_lock.lock();
//处理一些共享代码
my_uni_lock.unlock();
//处理一些非共享代码
my_uni_lock.lock();
//处理一些共享代码

3.3 try_lock()

尝试给互斥量加锁。如果拿不到锁,返回false,否则返回true。

3.4 release()

unique_lock my_uni_lock(my_mutex);

// 解除绑定,返回 mutex 对象的指针,并释放所有权
mutex* ptx = my_uni_lock.release();

4 unique_lock 所有权

4.1 move

unique_lock my_uni_lock2(std::move(my_uni_lock));

4.2 return 临时变量

unique_lock aFunction()
{
    unique_lock my_uni_lock(my_mutex);

    // 系统生成临时的 unique_lock 对象,并调用 unique_lock 的移动构造函数
    return my_uni_lock;
}

 

你可能感兴趣的:(c++)