Partager via


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.

Syntaxe

template <class Mutex>
class unique_lock;

Notes

L’argument de modèle Mutex doit nommer un type mutex.

En interne, un unique_lock stocke un pointeur vers un objet mutex associé et un bool qui indique si le thread actuel détient le mutex.

Membres

Typedefs publics

Nom Description
mutex_type Synonyme de l’argument de modèle Mutex.

Constructeurs publics

Nom Description
unique_lock Construit un objet unique_lock.
~unique_lock, destructeur Libère toutes les ressources associées à l’objet unique_lock.

Méthodes publiques

Nom Description
lock Bloque le thread appelant jusqu’à ce que le thread obtienne la propriété du mutex associé.
mutex Récupère le pointeur stocké vers le mutex associé.
owns_lock Spécifie si le thread appelant possède le mutex associé.
release Dissocie l’objet unique_lock de l’objet mutex associé.
swap Échange le mutex associé et l’état de propriété avec ceux d’un objet spécifié.
try_lock Tente d'obtenir la propriété de la référence mutex associée sans se bloquer.
try_lock_for Tente d'obtenir la propriété de la référence mutex associée sans se bloquer.
try_lock_until Tente d'obtenir la propriété de la référence mutex associée sans se bloquer.
unlock Libère la propriété du mutex associé.

Opérateurs publics

Nom Description
operator bool Spécifie si le thread appelant possède le mutex associé.
operator= Copie le pointeur mutex stocké et l’état de propriété associé à partir d’un objet spécifié.

Hiérarchie d'héritage

unique_lock

Spécifications

Header :<mutex>

Espace de noms : std

lock

Bloque le thread appelant jusqu’à ce que le thread obtienne la propriété du mutex associé.

void lock();

Notes

Si le pointeur stocké mutex a la valeur NULL, cette méthode lève un system_error qui a un code d’erreur .operation_not_permitted

Si le thread appelant possède déjà le mutex associé, cette méthode lève une system_error avec le code d’erreur resource_deadlock_would_occur.

Sinon, cette méthode appelle lock sur le mutex associé et définit l’indicateur de propriété de thread interne sur true.

mutex

Récupère le pointeur stocké vers le mutex associé.

mutex_type *mutex() const noexcept;

operator bool

Spécifie si le thread appelant possède le mutex associé.

explicit operator bool() noexcept

Valeur de retour

true si le thread possède le mutex ; sinon, false.

opérateur =

Copie le pointeur mutex stocké et l’état de propriété associé à partir d’un objet spécifié.

unique_lock& operator=(unique_lock&& Other) noexcept;

Paramètres

Other
Objet unique_lock.

Valeur de retour

*this

Notes

Si le thread appelant possède le mutex précédemment associé, avant que cette méthode appelle unlock sur le mutex, il assigne les nouvelles valeurs.

Après la copie, cette méthode définit Other sur un état construit par défaut.

owns_lock

Spécifie si le thread appelant possède le mutex associé.

bool owns_lock() const noexcept;

Valeur de retour

true si le thread possède le mutex ; sinon, false.

release

Dissocie l’objet unique_lock de l’objet mutex associé.

mutex_type *release() noexcept;

Valeur de retour

La valeur précédente du pointeur mutex stocké.

Notes

Cette méthode définit la valeur du pointeur mutex stocké à 0 et l’indicateur de propriété mutex interne à false.

swap

Échange le mutex associé et l’état de propriété avec ceux d’un objet spécifié.

void swap(unique_lock& Other) noexcept;

Paramètres

Other
Objet unique_lock.

try_lock

Tente d'obtenir la propriété de la référence mutex associée sans se bloquer.

bool try_lock() noexcept;

Valeur de retour

true si la méthode obtient correctement la propriété du mutex ; sinon, false.

Notes

Si le pointeur stocké mutex a la valeur NULL, la méthode lève un system_error dont le code operation_not_permittedd’erreur est .

Si le thread appelant possède déjà le mutex, la méthode lève une system_error avec le code d’erreur resource_deadlock_would_occur.

try_lock_for

Tente d'obtenir la propriété de la référence mutex associée sans se bloquer.

template <class Rep, class Period>
bool try_lock_for(
    const chrono::duration<Rep, Period>& Rel_time);

Paramètres

Rel_time
Objet chrono::duration qui spécifie la durée maximale pendant laquelle la méthode essaie d’obtenir la propriété du mutex.

Valeur de retour

true si la méthode obtient correctement la propriété du mutex ; sinon, false.

Notes

Si le pointeur stocké mutex a la valeur NULL, la méthode lève un system_error dont le code operation_not_permittedd’erreur est .

Si le thread appelant possède déjà le mutex, la méthode lève une system_error avec le code d’erreur resource_deadlock_would_occur.

try_lock_until

Tente d'obtenir la propriété de la référence mutex associée sans se bloquer.

template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& Abs_time);

bool try_lock_until(const xtime* Abs_time);

Paramètres

Abs_time
Point dans le temps qui spécifie le seuil au-delà duquel la méthode ne tente plus d'obtenir la propriété du mutex.

Valeur de retour

true si la méthode obtient correctement la propriété du mutex ; sinon, false.

Notes

Si le pointeur stocké mutex a la valeur NULL, la méthode lève un system_error dont le code operation_not_permittedd’erreur est .

Si le thread appelant possède déjà le mutex, la méthode lève une system_error avec le code d’erreur resource_deadlock_would_occur.

unique_lock, constructeur

Construit un objet unique_lock.

unique_lock() noexcept;
unique_lock(unique_lock&& Other) noexcept;
explicit unique_lock(mutex_type& Mtx);

unique_lock(mutex_type& Mtx, adopt_lock_t Adopt);

unique_lock(mutex_type& Mtx, defer_lock_t Defer) noexcept;
unique_lock(mutex_type& Mtx, try_to_lock_t Try);

template <class Rep, class Period>
unique_lock(mutex_type& Mtx,
    const chrono::duration<Rep, Period>
Rel_time);

template <class Clock, class Duration>
unique_lock(mutex_type& Mtx,
    const chrono::time_point<Clock, Duration>
Abs_time);

unique_lock(mutex_type& Mtx,
    const xtime* Abs_time) noexcept;

Paramètres

Mtx
Objet de type mutex.

Rel_time
Objet chrono::duration qui spécifie la durée maximale pendant laquelle la méthode essaie d’obtenir la propriété du mutex.

Abs_time
Point dans le temps qui spécifie le seuil au-delà duquel la méthode ne tente plus d'obtenir la propriété du mutex.

Other
Objet unique_lock.

Notes

Le premier constructeur construit un objet qui a une valeur de pointeur mutex associé de 0.

Le deuxième constructeur déplace l’état mutex associé à partir d’Autres. Après le déplacement, Other n’est plus associé à un mutex.

Les constructeurs restants stockent & Mtx comme pointeur stocké mutex . L’appartenance du mutex est déterminée par le deuxième argument, s’il existe.

Nom Description
No argument L’appartenance est obtenue en appelant la méthode lock sur l’objet mutex associé.
Adopt L’appartenance est supposée. Mtx doit être verrouillé quand le constructeur est appelé.
Defer Le thread appelant est supposé ne pas posséder l’objet mutex. Mtx ne doit pas être verrouillé quand le constructeur est appelé.
Try L’appartenance est déterminée en appelant try_lock sur l’objet mutex associé. Le constructeur ne lève aucune exception.
Rel_time L’appartenance est déterminée en appelant try_lock_for(Rel_time).
Abs_time L’appartenance est déterminée en appelant try_lock_until(Abs_time).

~unique_lock, destructeur

Libère toutes les ressources associées à l’objet unique_lock.

~unique_lock() noexcept;

Notes

Si le thread appelant possède le mutex associé, le destructeur libère la propriété en appelant unlock sur l’objet mutex.

déverrouiller

Libère la propriété du mutex associé.

void unlock();

Notes

Si le thread appelant ne possède pas le mutex associé, cette méthode lève une system_error avec le code d’erreur operation_not_permitted.

Sinon, cette méthode appelle unlock sur le mutex associé et définit l’indicateur de propriété de thread interne sur false.

Voir aussi

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