std::recursive_timed_mutex:: try_lock_until
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Locking | ||||
|
recursive_timed_mutex::try_lock_until
|
||||
| Native handle | ||||
|
template
<
class
Clock,
class
Duration
>
bool try_lock_until ( const std:: chrono :: time_point < Clock, Duration > & timeout_time ) ; |
(depuis C++11) | |
Tente de verrouiller le mutex. Bloque jusqu'à ce que le timeout_time spécifié soit atteint (timeout) ou que le verrou soit acquis (possède le mutex), selon la première éventualité. En cas de réussite du verrouillage, retourne true , sinon retourne false .
Si timeout_time est déjà dépassé, cette fonction se comporte comme try_lock() .
Clock
doit satisfaire aux exigences
Clock
.
Le programme est mal formé si
std::
chrono
::
is_clock_v
<
Clock
>
est
false
.
(depuis C++20)
La norme recommande que l'horloge liée à timeout_time soit utilisée, auquel cas les ajustements de l'horloge peuvent être pris en compte. Ainsi, la durée du bloc peut être supérieure ou inférieure à timeout_time - Clock :: now ( ) au moment de l'appel, selon la direction de l'ajustement et s'il est respecté par l'implémentation. La fonction peut également bloquer jusqu'à ce que timeout_time soit atteint en raison de délais d'ordonnancement des processus ou de contention des ressources.
Comme pour try_lock() , cette fonction peut échouer de manière sporadique et renvoyer false même si le mutex n'était verrouillé par aucun autre thread à un moment donné avant timeout_time .
L'opération de unlock() antérieure sur le même mutex synchronise-avec (tel que défini dans std::memory_order ) cette opération si elle retourne true .
Un thread peut appeler
try_lock_until
de manière répétée sur un mutex récursif. Les appels réussis à
try_lock_until
incrémentent le compteur de propriété : le mutex ne sera libéré qu'après que le thread ait effectué un nombre correspondant d'appels à
unlock
.
Le nombre maximum de niveaux de propriété n'est pas spécifié. Un appel à
try_lock_until
retournera
false
si ce nombre est dépassé.
Table des matières |
Paramètres
| timeout_time | - | point temporel maximum jusqu'auquel bloquer |
Valeur de retour
true si le verrou a été acquis avec succès, sinon false .
Exceptions
Toute exception levée par timeout_time (les horloges, points temporels et durées fournis par la bibliothèque standard ne lèvent jamais d'exception).
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
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 publié | Comportement corrigé |
|---|---|---|---|
| LWG 2093 | C++11 |
try_lock_until
ne lançait aucune exception
|
lance des exceptions liées aux délais d'attente |
Voir aussi
|
verrouille le mutex, bloque si le mutex n'est pas disponible
(fonction membre publique) |
|
|
tente de verrouiller le mutex, retourne si le mutex n'est pas disponible
(fonction membre publique) |
|
|
tente de verrouiller le mutex, retourne si le mutex est resté
indisponible pendant la durée de timeout spécifiée (fonction membre publique) |
|
|
déverrouille le mutex
(fonction membre publique) |
|
|
Documentation C
pour
mtx_timedlock
|
|