Namespaces
Variants

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

From cppreference.net
C++ named requirements

Les Mutex exigences étendent les Lockable exigences pour inclure la synchronisation inter-threads.

Table des matières

Exigences

Pour un objet m de type Mutex :

  • L'expression m. lock ( ) possède les propriétés suivantes
  • Se comporte comme une opération atomique.
  • Bloque le thread appelant jusqu'à ce que la propriété exclusive du mutex puisse être obtenue.
  • Les opérations m. unlock ( ) antérieures sur le même mutex synchronize-with cette opération de verrouillage (é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_mutex ou std::recursive_timed_mutex ).
  • Une exception de type std::system_error peut être levée en cas d'erreurs, avec les codes d'erreur suivants :
  • L'expression m. try_lock ( ) possède les propriétés suivantes
  • Se comporte comme une opération atomique.
  • Tente d'obtenir la propriété exclusive du mutex pour le thread appelant sans bloquer. Si la propriété n'est pas obtenue, retourne immédiatement. La fonction est autorisée à échouer de manière sporadique et à retourner même si le mutex n'est pas actuellement détenu par un autre thread.
  • Si try_lock() réussit, les opérations unlock() antérieures sur le même objet synchronize-with cette opération (équivalent à release-acquire std::memory_order ). lock() ne se synchronise pas avec un échec de try_lock() .
  • Ne lève pas d'exceptions.
  • L'expression m. unlock ( ) possède les propriétés suivantes
  • Se comporte comme une opération atomique.
  • Libère la propriété du mutex par le thread appelant et synchronizes-with les opérations de verrouillage ultérieures réussies sur le même objet.
  • Le comportement est indéfini si le thread appelant ne possède pas le mutex.
  • Ne lève pas d'exceptions.
  • Toutes les opérations de verrouillage et de déverrouillage sur un mutex unique se produisent dans un ordre total unique qui peut être considéré comme l'ordre de modification d'une variable atomique : l'ordre est spécifique à ce mutex individuel.

Bibliothèque standard

Les types suivants de la bibliothèque standard satisfont les exigences Mutex :

(C++11)
fournit une fonction d'exclusion mutuelle de base
(classe)
fournit une fonction d'exclusion mutuelle pouvant être verrouillée récursivement par le même thread
(classe)
fournit une fonction d'exclusion mutuelle pouvant être verrouillée récursivement
par le même thread et implémente le verrouillage avec un délai d'expiration
(classe)
fournit une fonction d'exclusion mutuelle partagée
(classe)
fournit une fonction d'exclusion mutuelle partagée et implémente le verrouillage avec un délai d'expiration
(classe)
fournit une fonction 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 2309 C++11 lock pourrait lever std::system_error
avec le code d'erreur std::errc::device_or_resource_busy
non autorisé

Voir aussi