stdthread并发unique_lock
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stdthread并发unique_lock相关的知识,希望对你有一定的参考价值。
1. std::unique_lock与std::lock_guard类似。通过对lock和unlock进行一次薄的封装,都能实现自动加锁与解锁功能,但是std::unique_lock要比std::lock_guard更灵活,占用空间相对更大一点且相对更慢一点。
1.1 主要成员函数
unique_lock() noexcept;//不管理任何 Mutex 对象
explicit unique_lock(mutex_type& m);
管理 Mutex 对象 m,并尝试调用 m.lock() 对 Mutex 对象进行上锁,如果此时另外某个 unique_lock 对象已经管理了该 Mutex 对象 m,则当前线程将会被阻塞。
(创建的 unique_lock 对象通常拥有 Mutex 对象的锁)
unique_lock(mutex_type& m, try_to_lock_t tag);
管理 Mutex 对象 m,并尝试调用 m.try_lock() 对 Mutex 对象进行上锁,但如果上锁不成功,并不会阻塞当前线程。
unique_lock(mutex_type& m, defer_lock_t tag) noexcept;
管理 Mutex 对象 m,但是在初始化的时候并不锁住 Mutex 对象。m 应该是一个没有当前线程锁住的 Mutex 对象。
(创建的则不会拥有锁)
unique_lock(mutex_type& m, adopt_lock_t tag);
管理 Mutex 对象 m, m 应该是一个已经被当前线程锁住的 Mutex 对象。(并且当前新创建的 unique_lock 对象拥有对锁(Lock)的所有权)。
(创建的 unique_lock 对象通常拥有 Mutex 对象的锁)
//相对时间
template <class Rep, class Period>
unique_lock(mutex_type& m, const chrono::duration<Rep,Period>& rel_time);
试图通过调用 m.try_lock_for(rel_time) 来锁住 Mutex 对象一段时间(rel_time)
//绝对时间
template <class Clock, class Duration>
unique_lock(mutex_type& m, const chrono::time_point<Clock,Duration>& abs_time);
试图通过调用 m.try_lock_until(abs_time) 来在某个时间点(abs_time)之前锁住 Mutex 对象。
unique_lock(const unique_lock&) = delete;
//move
unique_lock(unique_lock&& x);
eg .
std::mutex mut;
void insert_data()
std::lock_guard<std::mutex> lk(mut);
queue.push_back(data);
void process_data()
std::unqiue_lock<std::mutex> lk(mut);
queue.pop();
以上是关于stdthread并发unique_lock的主要内容,如果未能解决你的问题,请参考以下文章