如何避免使用lock_guard锁定

How to avoid locking using lock_guard?

本文关键字:guard 锁定 lock 何避免      更新时间:2023-10-16

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

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

如果它是可选的,那么避免锁定的方法是什么?

这是避免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,则行为未定义。