Namespaces
Variants

C++ named requirements: TimedMutex (since C++11)

From cppreference.net
C++ named requirements

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 . Si duration est inférieure ou égale à duration.zero() , tente d'obtenir la propriété sans bloquer (comme avec try_lock() ). Sinon, cette fonction bloque jusqu'à ce que le mutex soit acquis ou jusqu'à ce que le temps spécifié par duration s'écoule. Elle retourne dans duration seulement si elle réussit, mais elle peut échouer à acquérir le mutex même si à un moment donné pendant duration il 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érations unlock() 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 . Si time_point est déjà passé, tente d'obtenir la propriété sans bloquer (comme avec try_lock() ). Sinon, cette fonction bloque jusqu'à ce que le mutex soit acquis ou jusqu'à ce que le temps spécifié par time_point soit écoulé. Elle retourne avant time_point seulement si elle réussit, mais il est possible qu'elle échoue à acquérir le mutex même si à un moment donné avant time_point il 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érations unlock() 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 :

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)
fournit un mécanisme d'exclusion mutuelle partagée et implémente le verrouillage avec un délai d'expiration
(classe)
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

Voir aussi