https://en.cppreference.com/w/cpp/thread/lock_guard
(构造函数)
构造一个lock_guard,可以选择锁定给定的互斥体
如果是可选的,如何避免锁定?
答案 0 :(得分:2)
这是避免lock_guard
构造函数锁定给定mutex
的一种方法:
std::mutex mtx;
mtx.lock();
std::lock_guard<std::mutex> lck(mtx, std::adopt_lock);
目的是允许您的lock_guard
拥有您已经锁定的mutex
的所有权。
发件人:https://en.cppreference.com/w/cpp/thread/lock_guard/lock_guard
显式lock_guard(mutex_type&m); (1)(自C ++ 11起)
lock_guard(mutex_type&m,std :: adopt_lock_t t); (2)(自C ++ 11起)
lock_guard(const lock_guard&)=删除; (3)(自C ++ 11起)
获取给定互斥锁m的所有权。1) Effectively calls m.lock(). The behavior is undefined if m is not a recursive mutex and the current thread already owns m. 2) Acquires ownership of the mutex m without attempting to lock it.
如果当前线程不拥有m,则行为未定义。
3)复制构造函数被删除。
如果在lock_guard对象之前销毁m,则该行为是不确定的。