Compartir a través de


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.

Consulte también

Referencia de archivos de encabezado
<mutex>