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_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
.
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>