C++ named requirements: TimedMutex (since C++11)
From cppreference.net
Les TimedMutex exigences étendent les TimedLockable exigences pour inclure la synchronisation inter-threads.
Table des matières |
Exigences
De plus, pour un objet
m
de type
TimedMutex
:
- L'expression m. try_lock_for ( duration ) possède les propriétés suivantes
-
- Se comporte comme une opération atomique.
-
Tente d'obtenir la propriété exclusive du mutex dans la durée spécifiée par
duration. Sidurationest inférieure ou égale àduration.zero(), tente d'obtenir la propriété sans bloquer (comme avectry_lock()). Sinon, cette fonction bloque jusqu'à ce que le mutex soit acquis ou jusqu'à ce que le temps spécifié pardurations'écoule. Elle retourne dansdurationseulement si elle réussit, mais elle peut échouer à acquérir le mutex même si à un moment donné pendantdurationil n'était pas détenu par un autre thread. Dans tous les cas, elle retourne true si le mutex a été acquis et false sinon. -
Si
try_lock_for(duration)réussit, les opérationsunlock()antérieures sur le même objet synchronize-with cette opération (équivalent à release-acquire std::memory_order ). - Le comportement est indéfini si le thread appelant possède déjà le mutex (sauf si m est std::recursive_timed_mutex ).
- Une exception peut être levée par l'horloge, le point temporel ou la durée pendant l'exécution (les horloges, points temporels et durées fournis par la bibliothèque standard ne lèvent jamais d'exception).
- L'expression m. try_lock_until ( time_point ) possède les propriétés suivantes
-
- Se comporte comme une opération atomique.
-
Tente d'obtenir la propriété exclusive du mutex dans le temps restant jusqu'à
time_point. Sitime_pointest déjà passé, tente d'obtenir la propriété sans bloquer (comme avectry_lock()). Sinon, cette fonction bloque jusqu'à ce que le mutex soit acquis ou jusqu'à ce que le temps spécifié partime_pointsoit écoulé. Elle retourne avanttime_pointseulement si elle réussit, mais il est possible qu'elle échoue à acquérir le mutex même si à un moment donné avanttime_pointil n'était pas détenu par un autre thread. Dans tous les cas, elle retourne true si le mutex a été acquis et false sinon. -
Si
try_lock_until(time_point)réussit, les opérationsunlock()antérieures sur le même objet synchronize-with cette opération (équivalent à release-acquire std::memory_order ). - Le comportement est indéfini si le thread appelant possède déjà le mutex (sauf si m est std::recursive_timed_mutex ).
- Une exception peut être levée par l'horloge, le point temporel ou la durée pendant l'exécution (les horloges, points temporels et durées fournis par la bibliothèque standard ne lèvent jamais d'exception).
Bibliothèque standard
Les types de bibliothèque standard suivants satisfont les exigences TimedMutex :
|
(C++11)
|
fournit un mécanisme d'exclusion mutuelle qui peut être verrouillé récursivement
par le même thread et implémente le verrouillage avec un délai d'expiration (classe) |
|
(C++14)
|
fournit un mécanisme d'exclusion mutuelle partagée et implémente le verrouillage avec un délai d'expiration
(classe) |
|
(C++11)
|
fournit un mécanisme d'exclusion mutuelle qui implémente le verrouillage avec un délai d'expiration
(classe) |
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement tel que publié | Comportement correct |
|---|---|---|---|
| LWG 2093 | C++11 | les exceptions liées au timeout étaient manquantes dans la spécification | mentionnées |