unique_lock (Clase)
Representa una plantilla de la que se pueden crear instancias para crear objetos que administren el bloqueo y desbloqueo de una mutex
.
Sintaxis
template <class Mutex>
class unique_lock;
Comentarios
El argumento de plantilla Mutex
debe nombrar un tipo de exclusión mutua.
Internamente, un unique_lock
almacena un puntero a un objeto mutex
asociado y un bool
que indica si el subproceso actual posee el mutex
.
Miembros
Definiciones de tipos públicas
Nombre | Descripción |
---|---|
mutex_type |
Sinónimo del argumento de plantilla Mutex . |
Constructores públicos
Nombre | Descripción |
---|---|
unique_lock | Construye un objeto unique_lock . |
~unique_lock (Destructor) | Libera todos los recursos asociados con el objeto unique_lock . |
Métodos públicos
Nombre | Descripción |
---|---|
lock | Bloquea el subproceso de llamada hasta que este obtiene la propiedad de la mutex asociada. |
mutex | Recupera el puntero almacenado a la mutex asociada. |
owns_lock | Especifica si el subproceso de llamada tiene la propiedad de la mutex asociada. |
release | Desasocia el objeto unique_lock del objeto mutex asociado. |
swap | Intercambia el objeto mutex asociado y el estado de la propiedad con el de un objeto especificado. |
try_lock | Intenta obtener la propiedad del mutex asociado sin bloquearlo. |
try_lock_for | Intenta obtener la propiedad del mutex asociado sin bloquearlo. |
try_lock_until | Intenta obtener la propiedad del mutex asociado sin bloquearlo. |
unlock | Libera la propiedad del objeto mutex asociado. |
Operadores públicos
Nombre | Descripción |
---|---|
operator bool | Especifica si el subproceso de llamada tiene la propiedad del objeto mutex asociado. |
operator= | Copia el puntero mutex almacenado y el estado de la propiedad asociada de un objeto especificado. |
Jerarquía de herencia
unique_lock
Requisitos
Encabezado:<mutex>
Espacio de nombres: std
lock
Bloquea el subproceso de llamada hasta que este obtiene la propiedad de la mutex
asociada.
void lock();
Comentarios
Si el puntero mutex
almacenado es NULL, este método produce un system_error que tiene un código de error de operation_not_permitted
.
Si el subproceso de llamada ya posee el objeto mutex
asociado, este método produce un system_error
que tiene un código de error de resource_deadlock_would_occur
.
De lo contrario, este método llama a lock
en el objeto mutex
asociado y establece la marca de propiedad interna del subproceso en true
.
mutex
Recupera el puntero almacenado a la mutex
asociada.
mutex_type *mutex() const noexcept;
operator bool
Especifica si el subproceso de llamada tiene la propiedad de la exclusión mutua asociada.
explicit operator bool() noexcept
Valor devuelto
true
si el subproceso posee la exclusión mutua, de lo contrario, false
.
operator=
Copia el puntero mutex
almacenado y el estado de la propiedad asociada de un objeto especificado.
unique_lock& operator=(unique_lock&& Other) noexcept;
Parámetros
Otros
Un objeto unique_lock
.
Valor devuelto
*this
Comentarios
Si el subproceso de llamada posee el objeto mutex
asociado anteriormente, antes de que este método llame a unlock
en el objeto mutex
, asigna los nuevos valores.
Después de la copia, este método establece Otro en un estado construido de forma predeterminada.
owns_lock
Especifica si el subproceso de llamada tiene la propiedad de la mutex
asociada.
bool owns_lock() const noexcept;
Valor devuelto
true
si el subproceso posee el objeto mutex
, de lo contrario, false
.
release
Desasocia el objeto unique_lock
del objeto mutex
asociado.
mutex_type *release() noexcept;
Valor devuelto
El valor anterior del puntero mutex
almacenado.
Comentarios
Este método establece el valor del puntero mutex
almacenado en 0 y establece la marca la propiedad mutex
interna en false
.
swap
Intercambia el objeto mutex
asociado y el estado de la propiedad con el de un objeto especificado.
void swap(unique_lock& Other) noexcept;
Parámetros
Otros
Un objeto unique_lock
.
try_lock
Intenta obtener la propiedad del mutex
asociado sin bloquearlo.
bool try_lock() noexcept;
Valor devuelto
Es true
si el método obtiene correctamente la propiedad de mutex
; de lo contrario, es false
.
Comentarios
Si el puntero mutex
almacenado es NULL, el método produce un system_error que tiene un código de error de operation_not_permitted
.
Si el subproceso de llamada ya posee el objeto mutex
, el método produce un system_error
que tiene un código de error de resource_deadlock_would_occur
.
try_lock_for
Intenta obtener la propiedad del mutex
asociado sin bloquearlo.
template <class Rep, class Period>
bool try_lock_for(
const chrono::duration<Rep, Period>& Rel_time);
Parámetros
Rel_time
Un objeto chrono::duration que especifica el tiempo máximo que el método intenta obtener la propiedad de mutex
.
Valor devuelto
Es true
si el método obtiene correctamente la propiedad de mutex
; de lo contrario, es false
.
Comentarios
Si el puntero mutex
almacenado es NULL, el método produce un system_error que tiene un código de error de operation_not_permitted
.
Si el subproceso de llamada ya posee el objeto mutex
, el método produce un system_error
que tiene un código de error de resource_deadlock_would_occur
.
try_lock_until
Intenta obtener la propiedad del mutex
asociado sin bloquearlo.
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);
Parámetros
Abs_time
Punto en el tiempo que especifica el umbral después del cual el método ya no intenta obtener la propiedad de mutex
.
Valor devuelto
Es true
si el método obtiene correctamente la propiedad de mutex
; de lo contrario, es false
.
Comentarios
Si el puntero mutex
almacenado es NULL, el método produce un system_error que tiene un código de error de operation_not_permitted
.
Si el subproceso de llamada ya posee el objeto mutex
, el método produce un system_error
que tiene un código de error de resource_deadlock_would_occur
.
unique_lock (Constructor)
Construye un objeto unique_lock
.
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;
Parámetros
Mtx
Objeto de tipo de exclusión mutua.
Rel_time
Un objeto chrono::duration que especifica el tiempo máximo que el método intenta obtener la propiedad de mutex
.
Abs_time
Punto en el tiempo que especifica el umbral después del cual el método ya no intenta obtener la propiedad de mutex
.
Otros
Un objeto unique_lock
.
Comentarios
El primer constructor crea un objeto que tiene un valor de puntero de exclusión mutua asociado de 0.
El segundo constructor mueve el estado de la exclusión mutua asociado desde Otro. Tras el movimiento, Otro ya no está asociado a una exclusión mutua.
Los constructores restantes almacenan y Mtx como puntero almacenado mutex
. La propiedad del objeto mutex
está determinada por el segundo argumento, si existe.
Nombre | Descripción |
---|---|
No argument |
La propiedad se obtiene mediante una llamada al método lock en el objeto mutex asociado. |
Adopt |
Se supone la propiedad. Mtx debe estar bloqueado cuando se llama al constructor. |
Defer |
Se supone que el subproceso de llamada no posee el objeto mutex . Mtx no debe estar bloqueado cuando se llama al constructor. |
Try |
La propiedad se determina mediante una llamada a try_lock en el objeto mutex asociado. El constructor no inicia nada. |
Rel_time |
La propiedad se determina mediante una llamada a try_lock_for(Rel_time) . |
Abs_time |
La propiedad se determina mediante una llamada a try_lock_until(Abs_time) . |
~unique_lock (Destructor)
Libera todos los recursos asociados con el objeto unique_lock
.
~unique_lock() noexcept;
Comentarios
Si el subproceso de llamada posee el objeto mutex
asociado, el destructor libera la propiedad mediante la llamada a unlock en el objeto mutex
.
desbloquear
Libera la propiedad del objeto mutex
asociado.
void unlock();
Comentarios
Si el subproceso de llamada no posee el objeto mutex
asociado, este método produce un system_error que tiene un código de error de operation_not_permitted
.
De lo contrario, este método llama a unlock
en el objeto mutex
asociado y establece la marca de propiedad interna del subproceso en false
.