如何避免使用lock_guard锁定?

时间:2019-01-04 06:16:13

标签: c++ multithreading locking mutex

https://en.cppreference.com/w/cpp/thread/lock_guard

  

(构造函数)
  构造一个lock_guard,可以选择锁定给定的互斥体

如果是可选的,如何避免锁定?

1 个答案:

答案 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,则该行为是不确定的。

相关问题