std:: shared_timed_mutex
              
  | 
             
              
  | 
            |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Exclusive locking | ||||
| Shared locking | ||||
| 
           
           Défini dans l'en-tête
            
         
            
             <shared_mutex>
            
           
           | 
         ||
| 
           
           
            
             class
            
            shared_timed_mutex
            
             ;
            
           
           
          | 
         (depuis C++14) | |
       La classe
       
        shared_timed_mutex
       
       est un primitif de synchronisation qui peut être utilisé pour protéger des données partagées contre un accès simultané par plusieurs threads. Contrairement aux autres types de mutex qui facilitent l'accès exclusif, un
       
        shared_timed_mutex
       
       possède deux niveaux d'accès :
      
- exclusive - un seul thread peut posséder le mutex.
 
- shared - plusieurs threads peuvent partager la propriété du même mutex.
 
Les mutex partagés sont généralement utilisés dans des situations où plusieurs lecteurs peuvent accéder à la même ressource simultanément sans provoquer de courses aux données, mais un seul rédacteur peut le faire.
       D'une manière similaire à
       
        
         timed_mutex
        
       
       ,
       
        shared_timed_mutex
       
       offre la possibilité de tenter de revendiquer la propriété d'un
       
        shared_timed_mutex
       
       avec un délai d'attente via les fonctions membres
       
        
         try_lock_for()
        
       
       ,
       
        
         try_lock_until()
        
       
       ,
       
        
         try_lock_shared_for()
        
       
       ,
       
        
         try_lock_shared_until()
        
       
       .
      
       La classe
       
        shared_timed_mutex
       
       satisfait toutes les exigences de
       
        
         SharedTimedMutex
        
       
       et de
       
        
         StandardLayoutType
        
       
       .
      
         Table des matières | 
       
Fonctions membres
| 
         construit le mutex
          (fonction membre publique)  | 
       |
| 
         détruit le mutex
          (fonction membre publique)  | 
       |
| 
          
           
            
             operator=
            
           
           
          
           
            
             
              [deleted]
             
            
           
           
          | 
        
         non assignable par copie
          (fonction membre publique)  | 
       
         Verrouillage exclusif | 
       |
| 
         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)  | 
       |
| 
         tente de verrouiller le mutex, retourne si le mutex est resté
          indisponible jusqu'à ce que le point temporel spécifié soit atteint (fonction membre publique)  | 
       |
| 
         déverrouille le mutex
          (fonction membre publique)  | 
       |
         Verrouillage partagé | 
       |
| 
         verrouille le mutex en propriété partagée, bloque si le mutex n'est pas disponible
          (fonction membre publique)  | 
       |
| 
         tente de verrouiller le mutex en propriété partagée, retourne si le mutex n'est pas disponible
          (fonction membre publique)  | 
       |
| 
         tente de verrouiller le mutex en propriété partagée, retourne si le mutex est resté
          indisponible pendant la durée de timeout spécifiée (fonction membre publique)  | 
       |
| 
         tente de verrouiller le mutex en propriété partagée, retourne si le mutex est resté
          indisponible jusqu'à ce que le point temporel spécifié soit atteint (fonction membre publique)  | 
       |
| 
         déverrouille le mutex (propriété partagée)
          (fonction membre publique)  | 
       |
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité | 
|---|---|---|---|
         
          
           __cpp_lib_shared_timed_mutex
          
         
         | 
        
         
          
           201402L
          
         
         | 
        (C++14) | 
         
          std::shared_timed_mutex
         
         | 
       
Exemple
| 
         Cette section est incomplète
          Raison : construire un exemple motivant  | 
       
Un opérateur d'affectation par copie pour une classe qui détient des ressources pouvant gérer plusieurs lecteurs, mais un seul écrivain.
#include <mutex> #include <shared_mutex> class R { mutable std::shared_timed_mutex mut; /* data */ public: R& operator=(const R& other) { // requires exclusive ownership to write to *this std::unique_lock<std::shared_timed_mutex> lhs(mut, std::defer_lock); // requires shared ownership to read from other std::shared_lock<std::shared_timed_mutex> rhs(other.mut, std::defer_lock); std::lock(lhs, rhs); /* assign data */ return *this; } }; int main() { R r; }