Compartir a través de


<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 a bool y true si el método obtiene la propiedad, pero en caso contrario es false.

  • 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 de chrono::duration. El método intenta obtener la propiedad de la exclusión mutua, pero devuelve dentro del período de tiempo designado por Rel_time, independientemente de que la operación se haya realizado o no correctamente. El valor devuelto se convierte en true si el método obtiene la propiedad; de lo contrario, se convierte en false.

  • Se debe poder llamar al método try_lock_until mediante un argumento, Abs_time, cuyo tipo es la creación de una instancia de chrono::time_point. El método intenta obtener la propiedad de la exclusión mutua, pero devuelve antes de que se supere el tiempo designado por Abs_time, independientemente de que la operación se haya realizado o no correctamente. El valor devuelto se convierte en true si el método obtiene la propiedad; de lo contrario, se convierte en false.

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.

Consulte también

Referencia de archivos de encabezado