C++ named requirements: SharedMutex (since C++17)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Les SharedMutex exigences étendent les Mutex exigences pour inclure le mode de propriété de verrou partagé.
Exigences
De plus, un objet
m
de type
SharedMutex
prend en charge un autre mode de propriété : partagé. Plusieurs threads (ou, plus généralement, des agents d'exécution) peuvent posséder simultanément ce mutex en mode partagé, mais aucun thread ne peut obtenir la propriété partagée s'il existe un thread qui le possède en mode exclusif, et aucun thread ne peut obtenir la propriété exclusive s'il existe un thread qui le possède en mode partagé. Si plus d'un nombre défini par l'implémentation (au moins 10000) de threads détiennent un verrou partagé, toute tentative supplémentaire d'acquisition du mutex en mode partagé est bloquée jusqu'à ce que le nombre de propriétaires partagés descende en dessous de ce seuil.
- L'expression m. lock_shared ( ) possède les propriétés suivantes :
-
- Se comporte comme une opération atomique.
- Bloque le thread appelant jusqu'à ce que la propriété partagée 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 dans n'importe quel mode.
- Si une exception est levée, le verrou partagé n'est pas acquis.
- L'expression m. try_lock_shared ( ) possède les propriétés suivantes :
-
- Se comporte comme une opération atomique.
- Tente d'obtenir la propriété partagée 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 actuellement détenu par aucun thread dans aucun mode.
-
Si
try_lock_shared()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 dans n'importe quel mode.
- L'expression m. unlock_shared ( ) 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 synchronise-avec 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.
- Toutes les opérations de verrouillage et de déverrouillage sur un seul mutex se produisent dans un ordre total unique.
Bibliothèque standard
Les types de bibliothèque standard suivants satisfont aux exigences SharedMutex :
|
(C++17)
|
fournit une fonctionnalité d'exclusion mutuelle partagée
(classe) |
|
(C++14)
|
fournit une fonctionnalité d'exclusion mutuelle partagée et implémente le verrouillage avec un délai d'expiration
(classe) |