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
Autres
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
Autres
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_permitted
d’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_permitted
d’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_permitted
d’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
.
Autres
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>
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour