Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The latest version of this topic can be found at unique_lock Class.
Represents a template that can be instantiated to create objects that manage the locking and unlocking of a mutex.
Syntax
template <class Mutex>
class unique_lock;
Remarks
The template argument Mutex must name a mutex type.
Internally, a unique_lock stores a pointer to an associated mutex object and a bool that indicates whether the current thread owns the mutex.
Members
Public Typedefs
| Name | Description |
|---|---|
unique_lock::mutex_type |
Synonym for the template argument Mutex. |
Public Constructors
| Name | Description |
|---|---|
| unique_lock::unique_lock Constructor | Constructs a unique_lock object. |
| unique_lock::~unique_lock Destructor | Releases any resources that are associated with the unique_lock object. |
Public Methods
| Name | Description |
|---|---|
| unique_lock::lock Method | Blocks the calling thread until the thread obtains ownership of the associated mutex. |
| unique_lock::mutex Method | Retrieves the stored pointer to the associated mutex. |
| unique_lock::owns_lock Method | Specifies whether the calling thread owns the associated mutex. |
| unique_lock::release Method | Disassociates the unique_lock object from the associated mutex object. |
| unique_lock::swap Method | Swaps the associated mutex and ownership status with that of a specified object. |
| unique_lock::try_lock Method | Attempts to obtain ownership of the associated mutex without blocking. |
| unique_lock::try_lock_for Method | Attempts to obtain ownership of the associated mutex without blocking. |
| unique_lock::try_lock_until Method | Attempts to obtain ownership of the associated mutex without blocking. |
| unique_lock::unlock Method | Releases ownership of the associated mutex. |
Public Operators
| Name | Description |
|---|---|
| unique_lock::operator bool | Specifies whether the calling thread has ownership of the associated mutex. |
| unique_lock::operator= | Copies the stored mutex pointer and associated ownership status from a specified object. |
Inheritance Hierarchy
unique_lock
Requirements
Header: mutex
Namespace: std
unique_lock::lock Method
Blocks the calling thread until the thread obtains ownership of the associated mutex.
void lock();
Remarks
If the stored mutex pointer is null, this method throws a system_error that has an error code of operation_not_permitted.
If the calling thread already owns the associated mutex, this method throws a system_error that has an error code of resource_deadlock_would_occur.
Otherwise, this method calls lock on the associated mutex and sets the internal thread ownership flag to true.
unique_lock::mutex Method
Retrieves the stored pointer to the associated mutex.
mutex_type *mutex() const noexcept;
unique_lock::operator bool
Specifies whether the calling thread has ownership of the associated mutex.
explicit operator bool() noexcept
Return Value
true if the thread owns the mutex; otherwise false.
unique_lock::operator=
Copies the stored mutex pointer and associated ownership status from a specified object.
unique_lock& operator=(unique_lock&& Other) noexcept;
Parameters
Other
A unique_lock object.
Return Value
*this
Remarks
If the calling thread owns the previously associated mutex, before this method calls unlock on the mutex, it assigns the new values.
After the copy, this method sets Other to a default-constructed state.
unique_lock::owns_lock Method
Specifies whether the calling thread owns the associated mutex.
bool owns_lock() const noexcept;
Return Value
true if the thread owns the mutex; otherwise, false.
unique_lock::release Method
Disassociates the unique_lock object from the associated mutex object.
mutex_type *release() noexcept;
Return Value
The previous value of the stored mutex pointer.
Remarks
This method sets the value of the stored mutex pointer to 0 and sets the internal mutex ownership flag to false.
unique_lock::swap Method
Swaps the associated mutex and ownership status with that of a specified object.
void swap(unique_lock& Other) noexcept;
Parameters
Other
A unique_lock object.
unique_lock::try_lock Method
Attempts to obtain ownership of the associated mutex without blocking.
bool try_lock() noexcept;
Return Value
true if the method successfully obtains ownership of the mutex; otherwise, false.
Remarks
If the stored mutex pointer is null, the method throws a system_error that has an error code of operation_not_permitted.
If the calling thread already owns the mutex, the method throws a system_error that has an error code of resource_deadlock_would_occur.
unique_lock::try_lock_for Method
Attempts to obtain ownership of the associated mutex without blocking.
template <class Rep, class Period>
bool try_lock_for(
const chrono::duration<Rep, Period>& Rel_time);
Parameters
Rel_time
A chrono::duration object that specifies the maximum amount of time that the method attempts to obtain ownership of the mutex.
Return Value
true if the method successfully obtains ownership of the mutex; otherwise, false.
Remarks
If the stored mutex pointer is null, the method throws a system_error that has an error code of operation_not_permitted.
If the calling thread already owns the mutex, the method throws a system_error that has an error code of resource_deadlock_would_occur.
unique_lock::try_lock_until Method
Attempts to obtain ownership of the associated mutex without blocking.
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& Abs_time);
bool try_lock_until(const xtime* Abs_time);
Parameters
Abs_time
A point in time that specifies the threshold after which the method no longer attempts to obtain ownership of the mutex.
Return Value
true if the method successfully obtains ownership of the mutex; otherwise, false.
Remarks
If the stored mutex pointer is null, the method throws a system_error that has an error code of operation_not_permitted.
If the calling thread already owns the mutex, the method throws a system_error that has an error code of resource_deadlock_would_occur.
unique_lock::unique_lock Constructor
Constructs a unique_lock object.
unique_lock() noexcept;
unique_lock(unique_lock&& Other) noexcept;
explicit unique_lock(mutex_type& Mtx);
unique_lock(mutex_type& Mtx, adopt_lock_t Adopt);
unique_lock(mutex_type& Mtx, defer_lock_t Defer) noexcept;
unique_lock(mutex_type& Mtx, try_to_lock_t Try);
template <class Rep, class Period>
unique_lock(mutex_type& Mtx,
const chrono::duration<Rep, Period>
Rel_time);
template <class Clock, class Duration>
unique_lock(mutex_type& Mtx,
const chrono::time_point<Clock, Duration>
Abs_time);
unique_lock(mutex_type& Mtx,
const xtime* Abs_time) noexcept;
Parameters
Mtx
A mutex type object.
Rel_time
A chrono::duration object that specifies the maximum amount of time that the method attempts to obtain ownership of the mutex.
Abs_time
A point in time that specifies the threshold after which the method no longer attempts to obtain ownership of the mutex.
Other
A unique_lock object.
Remarks
The first constructor constructs an object that has an associated mutex pointer value of 0.
The second constructor moves the associated mutex status from Other. After the move, Other is no longer associated with a mutex.
The remaining constructors store & Mtx as the stored mutex pointer. Ownership of the mutex is determined by the second argument, if it exists.
No argument |
Ownership is obtained by calling the lock method on the associated mutex object. |
Adopt |
Ownership is assumed. Mtx must be locked when the constructor is called. |
Defer |
The calling thread is assumed not to own the mutex object. Mtx must not be locked when the constructor is called. |
Try |
Ownership is determined by calling try_lock on the associated mutex object. The constructor throws nothing. |
Rel_time |
Ownership is determined by calling try_lock_for(Rel_time). |
Abs_time |
Ownership is determined by calling try_lock_until(Abs_time). |
unique_lock::~unique_lock Destructor
Releases any resources that are associated with the unique_lock object.
~unique_lock() noexcept;
Remarks
If the calling thread owns the associated mutex, the destructor releases ownership by calling unlock on the mutex object.
unique_lock::unlock Method
Releases ownership of the associated mutex.
void unlock();
Remarks
If the calling thread doesn't own the associated mutex, this method throws a system_error that has an error code of operation_not_permitted.
Otherwise, this method calls unlock on the associated mutex and sets the internal thread ownership flag to false.