Namespaces
Variants

std::recursive_timed_mutex:: try_lock_until

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
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

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