Se recomienda usar Visual Studio 2017

<mutex>

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Incluya el encabezado estándar <> > para definir las clases de mutex, recursive_mutex, timed_mutex, y recursive_timed_mutex; las plantillas de lock_guard y unique_lock; y compatibilidad de tipos y funciones que definen las regiones de código de la exclusión mutua.

System_CAPS_ICON_warning.jpg Advertencia

Los tipos de sincronización de STL en Visual Studio 2015 se basan en los primitivos de sincronización de Windows y ya no utilizan ConcRT (salvo cuando la plataforma de destino es Windows XP). Los tipos definidos en <> > no debe utilizarse con todos los tipos de ConcRT o funciones.

#include <mutex>  

System_CAPS_ICON_note.jpg Nota

En el código que se compila con /CLR o /CLR: pure, este encabezado está bloqueado.

Las clases de 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 los objetos de estos tipos como el Lock argumento a las funciones miembro de espera en la plantilla condition_variable_any.

Un superó el tiempo de tipo de exclusión mutua satisface los requisitos para 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.

  • El try_lock_for método debe ser invocable mediante el uso de un argumento, Rel_time, cuyo tipo es 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.

  • El try_lock_until método debe ser invocable mediante el uso de un argumento, Abs_time, cuyo tipo es 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 es conocido 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 cronometrados también es conocido como un temporizado bloqueable tipo.

Clases

NombreDescripción
lock_guard (clase)Representa una plantilla de la que se pueden crear instancias para crear un objeto cuyo destructor desbloquea una mutex.
Mutex (clase) (STL)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 la llamada a métodos de bloqueos para objetos que ya estén bloqueados está bien definido.
recursive_timed_mutex (clase)Representa un tipo de exclusión mutua cronometrado. 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 los objetos de tipo timed_mutex, el efecto de llamar a métodos de bloqueos de objetos recursive_timed_mutex está bien definido.
timed_mutex (clase)Representa un tipo de exclusión mutua cronometrado. 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 mutex.

Funciones

NameDescripción
call_once (función)Proporciona un mecanismo para llamar exactamente una vez durante la ejecución a un objeto especificado que se puede llamar.
lock (función)Intenta bloquear todos los argumentos sin interbloqueo.

Structs

NombreDescripció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

NombreDescripción
adopt_lock (Variable)Representa un objeto que se puede pasar a los constructores para lock_guard y unique_lock para indicar que el objeto de exclusión mutua que también se pasa al constructor está bloqueado.
defer_lock (Variable)Representa un objeto que se puede pasar al constructor de unique_lock para indicar que el constructor no debería bloquear el objeto de exclusión mutua que también se pasa a él.
try_to_lock (Variable)Representa un objeto que se puede pasar al constructor de unique_lock para indicar que el constructor debería intentar desbloquear la mutex que también se pasa a él sin bloquearla.

Referencia de archivos de encabezado

Mostrar: