33 Thread support library [thread]
namespace std {
template <class Mutex>
class lock_guard {
public:
using mutex_type = Mutex;
explicit lock_guard(mutex_type& m);
lock_guard(mutex_type& m, adopt_lock_t);
~lock_guard();
lock_guard(const lock_guard&) = delete;
lock_guard& operator=(const lock_guard&) = delete;
private:
mutex_type& pm; };
template<class Mutex> lock_guard(lock_guard<Mutex>) -> lock_guard<Mutex>;
}
An object of type
lock_guard controls the ownership of a lockable object
within a scope
. A
lock_guard object maintains ownership of a lockable
object throughout the
lock_guard object's lifetime (
[basic.life])
. The behavior of a program is undefined if the lockable object referenced by
pm does not exist for the entire lifetime of the
lock_guard
object
. explicit lock_guard(mutex_type& m);
Requires: If
mutex_type is not a recursive mutex,
the calling thread does not own the mutex
m. Effects: As if by
m.lock(). lock_guard(mutex_type& m, adopt_lock_t);
Requires: The calling thread owns the mutex
m. ~lock_guard();
Effects: As if by
pm.unlock().