<mutex>
Incluya el encabezado estándar <mutex>
para definir las clases mutex
, recursive_mutex
, timed_mutex
y recursive_timed_mutex
; las plantillas lock_guard
y unique_lock
; y tipos y funciones auxiliares que definen regiones de código de exclusión mutua.
Advertencia
A partir de Visual Studio 2015, los tipos de sincronización de la biblioteca estándar de C++ se basan en primitivos de sincronización de Windows y ya no usan ConcRT (salvo cuando la plataforma de destino es Windows XP). Los tipos definidos en <mutex>
no deben usarse con ninguna función o tipo ConcRT.
Requisitos
Encabezado: <mutex>
Espacio de nombres: std
Comentarios
Nota:
En el código que se compila mediante /clr
, este encabezado está bloqueado.
Las clases mutex
y recursive_mutex
son tipos de exclusión mutua. Un tipo de exclusión mutua tiene un constructor predeterminado y un destructor que no inicia excepciones. Estos objetos tienen métodos que proporcionan exclusión mutua cuando varios subprocesos intentan bloquear el mismo objeto. En concreto, un tipo de exclusión mutua contiene los métodos lock
, try_lock
y unlock
:
El método
lock
bloquea el subproceso que realiza la llamada hasta que el subproceso obtenga la propiedad de la exclusión mutua. Su valor devuelto se omite.El método
try_lock
intenta obtener la propiedad de la exclusión mutua sin bloquear. Su tipo de valor devuelto se puede convertir abool
ytrue
si el método obtiene la propiedad, pero en caso contrario esfalse
.El método
unlock
libera la propiedad de la exclusión mutua del subproceso que llama.
Puede usar tipos de exclusión mutua como argumentos de tipo para crear instancias de las plantillas lock_guard
y unique_lock
. Puede usar objetos de estos tipos como el argumento Lock
para las funciones miembro de espera en la plantilla condition_variable_any
.
Un tipo de exclusión mutua cronometrado satisface los requisitos de un tipo de exclusión mutua. Además, tiene los métodos try_lock_for
y try_lock_until
que deben ser invocables mediante el uso de un argumento y deben devolver un tipo que se pueda convertir en bool
. Un tipo de exclusión mutua cronometrado puede definir estas funciones mediante argumentos adicionales, siempre que todos esos argumentos adicionales tengan valores predeterminados.
Se debe poder llamar al método
try_lock_for
mediante un argumento,Rel_time
, cuyo tipo es la creación de una instancia dechrono::duration
. El método intenta obtener la propiedad de la exclusión mutua, pero devuelve dentro del período de tiempo designado porRel_time
, independientemente de que la operación se haya realizado o no correctamente. El valor devuelto se convierte entrue
si el método obtiene la propiedad; de lo contrario, se convierte enfalse
.Se debe poder llamar al método
try_lock_until
mediante un argumento,Abs_time
, cuyo tipo es la creación de una instancia dechrono::time_point
. El método intenta obtener la propiedad de la exclusión mutua, pero devuelve antes de que se supere el tiempo designado porAbs_time
, independientemente de que la operación se haya realizado o no correctamente. El valor devuelto se convierte entrue
si el método obtiene la propiedad; de lo contrario, se convierte enfalse
.
Un tipo de exclusión mutua también se conoce como un tipo bloqueable. Si no proporciona la función miembro try_lock
, es un tipo bloqueable básico. Un tipo de exclusión mutua cronometrado se conoce como tipo bloqueable cronometrado. Un tipo bloqueable cronometrado se bloquea durante un período de tiempo especificado o hasta que se adquiere un bloqueo en la exclusión mutua.
Miembros
Clases
NOMBRE | Descripción |
---|---|
lock_guard (clase) |
Representa una plantilla de la que se pueden crear instancias para crear un objeto cuyo destructor desbloquea una exclusión mutua. |
mutex (Clase, Biblioteca estándar de C++) |
Representa un tipo de exclusión mutua. Use objetos de este tipo para aplicar la exclusión mutua dentro de un programa. |
recursive_mutex (clase) |
Representa un tipo de exclusión mutua. Al contrario que la clase mutex , el comportamiento de las llamadas a métodos de bloqueo para objetos que ya están bloqueados está bien definido. |
recursive_timed_mutex (clase) |
Use objetos de este tipo para aplicar una exclusión mutua que tenga un bloqueo limitado por tiempo dentro de un programa. A diferencia de timed_mutex , el efecto de llamar a métodos de bloqueo de objetos recursive_timed_mutex está bien definido. |
scoped_lock (clase) |
|
timed_mutex (clase) |
Use objetos de este tipo para aplicar una exclusión mutua que tenga un bloqueo limitado por tiempo dentro de un programa. |
unique_lock (clase) |
Representa una plantilla de la que se pueden crear instancias para crear objetos que administren el bloqueo y desbloqueo de una exclusión mutua. |
Funciones
Nombre | Descripción |
---|---|
call_once |
Proporciona un mecanismo para llamar exactamente una vez durante la ejecución a un objeto especificado que se puede llamar. |
lock |
Intenta bloquear todos los argumentos sin interbloqueo. |
swap |
Intenta intercambiar los estados internos de dos objetos mutex , x y y . |
try_lock |
Intenta bloquear el objeto que se puede bloquear. Se devuelve inmediatamente. |
Estructuras
Nombre | Descripción |
---|---|
adopt_lock_t (Estructura) |
Representa un tipo que se utiliza para definir un adopt_lock . |
defer_lock_t (Estructura) |
Representa un tipo que define un objeto defer_lock que se utiliza para seleccionar uno de los constructores sobrecargados de unique_lock . |
once_flag (Estructura) |
Representa un struct que se utiliza con la función de plantilla call_once para asegurarse de que solo se llame una vez al código de inicialización, incluso ante la presencia de varios subprocesos de ejecución. |
try_to_lock_t (Estructura) |
Representa un struct que define un objeto try_to_lock y que se utiliza para seleccionar uno de los constructores sobrecargados de unique_lock . |
Variables
Nombre | Descripción |
---|---|
adopt_lock |
Representa un objeto que se puede pasar a los constructores de lock_guard y unique_lock para indicar que el objeto mutex que también se pasa al constructor está bloqueado. |
defer_lock |
Representa un objeto que se puede pasar al constructor de unique_lock para indicar que el constructor no debería bloquear el objeto mutex que también se le pasa. |
try_to_lock |
Representa un objeto que se puede pasar al constructor de unique_lock para indicar que el constructor debería intentar desbloquear el objeto mutex que también se le pasa sin bloquearlo. |