<mutex>
Incluez l’en-tête <mutex>
standard pour définir les classes mutex
, recursive_mutex
et timed_mutex
recursive_timed_mutex
; les modèles lock_guard
et unique_lock
; et les types et fonctions de prise en charge qui définissent des régions de code d’exclusion mutuelle.
Avertissement
À compter de Visual Studio 2015, les types de synchronisation de bibliothèque standard C++ sont basés sur des primitives de synchronisation Windows et n’utilisent plus ConcRT (sauf lorsque la plateforme cible est Windows XP). Les types définis dans <mutex>
ne doivent pas être utilisés avec des types ou fonctions ConcRT.
Spécifications
En-tête : <mutex>
Espace de noms : std
Notes
Remarque
Dans le code compilé à l’aide /clr
de , cet en-tête est bloqué.
Les classes mutex
et recursive_mutex
sont des types mutex. Un type mutex a un constructeur par défaut et un destructeur qui ne lève pas d’exceptions. Ces objets ont des méthodes qui fournissent un mutex quand plusieurs threads essaient de verrouiller le même objet. Plus précisément, un type mutex contient les méthodes lock
, try_lock
et unlock
:
La méthode
lock
bloque le thread appelant jusqu'à ce que le thread obtienne la propriété du mutex. Sa valeur de retour est ignorée.La méthode
try_lock
tente d'obtenir la propriété du mutex sans se bloquer. Son type de retour est convertible enbool
et correspond àtrue
si la méthode obtient la propriété. Sinon, il correspond àfalse
.La méthode
unlock
libère la propriété du mutex du thread appelant.
Vous pouvez utiliser les types mutex comme arguments de type pour instancier les modèles lock_guard
et unique_lock
. Vous pouvez utiliser des objets de ces types comme Lock
argument pour les fonctions membres d’attente dans le modèle condition_variable_any
.
Un type mutex limité dans le temps répond aux exigences d’un type mutex. En outre, il a les méthodes try_lock_for
et try_lock_until
qui doivent pouvoir être appelées à l'aide d'un seul argument, et retourner un type convertible en bool
. Un type mutex limité dans le temps peut définir ces fonctions à l’aide d’arguments supplémentaires, à condition que ces arguments supplémentaires aient tous des valeurs par défaut.
La
try_lock_for
méthode doit être appelée à l’aide d’un seul argument,Rel_time
dont le type est une instanciation dechrono::duration
. La méthode essaie d'obtenir la propriété du mutex. Toutefois, elle retourne une valeur dans le temps imparti désigné parRel_time
, indépendamment de la réussite de l'opération. La valeur de retour est convertie entrue
si la méthode obtient la propriété ; sinon, la valeur de retour est convertie enfalse
.La
try_lock_until
méthode doit être appelée à l’aide d’un seul argument,Abs_time
dont le type est une instanciation dechrono::time_point
. La méthode essaie d'obtenir la propriété du mutex. Toutefois, elle retourne une valeur dans le temps imparti désigné parAbs_time
, indépendamment de la réussite de l'opération. La valeur de retour est convertie entrue
si la méthode obtient la propriété ; sinon, la valeur de retour est convertie enfalse
.
Un type mutex est également appelé type verrouillable. S’il ne fournit pas la fonction try_lock
membre, il s’agit d’un type verrouillable de base. Un type mutex chronométré est appelé type verrouillable chronologique. Un bloc de type verrouillable chronométré pendant une durée spécifiée ou jusqu’à ce qu’un verrou sur le mutex soit acquis.
Membres
Classes
Nom | Description |
---|---|
lock_guard Classe |
Représente un modèle qui peut être instancié pour créer un objet dont le destructeur déverrouille un mutex. |
mutex Classe (bibliothèque standard C++) |
Représente un type mutex. Utilisez les objets de ce type pour appliquer une exclusion mutuelle (mutex) dans un programme. |
recursive_mutex Classe |
Représente un type mutex. Contrairement à la mutex classe, le comportement d’appel des méthodes de verrouillage pour les objets déjà verrouillés est bien défini. |
recursive_timed_mutex Classe |
Utilisez les objets de ce type pour appliquer une exclusion mutuelle (mutex) dont le blocage est limité dans le temps au sein d'un programme. Contrairement timed_mutex à , l’effet de l’appel de méthodes de verrouillage pour recursive_timed_mutex les objets est bien défini. |
scoped_lock Classe |
|
timed_mutex Classe |
Utilisez les objets de ce type pour appliquer une exclusion mutuelle (mutex) dont le blocage est limité dans le temps au sein d'un programme. |
unique_lock Classe |
Représente un modèle qui peut être instancié pour créer des objets qui gèrent le verrouillage et le déverrouillage d’un mutex. |
Functions
Nom | Description |
---|---|
call_once |
Fournit un mécanisme permettant d'appeler un objet spécifique pouvant être appelé une seule fois durant l'exécution. |
lock |
Tente de verrouiller tous les arguments sans interblocage. |
swap |
Tente d’échanger les états internes de deux mutex objets, x et y . |
try_lock |
Tente de verrouiller l’objet verrouillable. Retourne immédiatement. |
Structures
Nom | Description |
---|---|
adopt_lock_t Structure |
Représente un type utilisé pour définir adopt_lock . |
defer_lock_t Structure |
Représente un type qui définit un objet defer_lock permettant de sélectionner l'un des constructeurs surchargés de unique_lock . |
once_flag Structure |
Représente un struct utilisé dans le cadre de la fonction avec modèle call_once pour garantir que le code d'initialisation est appelé une seule fois, même en présence de plusieurs threads d'exécution. |
try_to_lock_t Structure |
Représente un struct qui définit un objet try_to_lock et permet de sélectionner l'un des constructeurs surchargés de unique_lock . |
Variables
Nom | Description |
---|---|
adopt_lock |
Représente un objet qui peut être passé aux constructeurs et lock_guard unique_lock pour indiquer que l’objet mutex qui est également passé au constructeur est verrouillé. |
defer_lock |
Représente un objet qui peut être passé au constructeur pour unique_lock , pour indiquer que le constructeur ne doit pas verrouiller l’objet mutex qui est également passé à celui-ci. |
try_to_lock |
Représente un objet qui peut être passé au constructeur pour unique_lock indiquer que le constructeur doit essayer de déverrouiller l’objet mutex qui est également passé à celui-ci sans bloquer. |