33
Concurrency support library
[thread]
33.6
Mutual exclusion
[thread.mutex]
33.6.5
Locks
[thread.lock]
33.6.5.2
Class template
lock_
guard
[thread.lock.guard]
🔗
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;
//
exposition only
}
;
}
1
#
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
.
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
.
The supplied
Mutex
type shall meet the
Cpp17BasicLockable
requirements (
[thread.
req.
lockable.
basic]
)
.
🔗
explicit
lock_guard
(
mutex_type
&
m
)
;
2
#
Effects
: Initializes
pm
with
m
.
Calls
m
.
lock
(
)
.
🔗
lock_guard
(
mutex_type
&
m, adopt_lock_t
)
;
3
#
Preconditions
: The calling thread holds a non-shared lock on
m
.
4
#
Effects
: Initializes
pm
with
m
.
5
#
Throws
: Nothing
.
🔗
~
lock_guard
(
)
;
6
#
Effects
: Equivalent to:
pm
.
unlock
(
)