Partager via


<mutex>

Incluez l’en-tête <mutex> standard pour définir les classes mutex, recursive_mutexet timed_mutexrecursive_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 /clrde , 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 en bool 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_timedont le type est une instanciation de chrono::duration. La méthode essaie d'obtenir la propriété du mutex. Toutefois, elle retourne une valeur dans le temps imparti désigné par Rel_time, indépendamment de la réussite de l'opération. La valeur de retour est convertie en true si la méthode obtient la propriété ; sinon, la valeur de retour est convertie en false.

  • La try_lock_until méthode doit être appelée à l’aide d’un seul argument, Abs_timedont le type est une instanciation de chrono::time_point. La méthode essaie d'obtenir la propriété du mutex. Toutefois, elle retourne une valeur dans le temps imparti désigné par Abs_time, indépendamment de la réussite de l'opération. La valeur de retour est convertie en true si la méthode obtient la propriété ; sinon, la valeur de retour est convertie en false.

Un type mutex est également appelé type verrouillable. S’il ne fournit pas la fonction try_lockmembre, 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.

Voir aussi

Informations de référence sur les fichiers d’en-tête