std::atomic_ref<T>:: atomic_ref
      From cppreference.net
     
     
      
       <
       
        cpp
       
        |
       
        atomic
       
        |
       
        atomic ref
       
      
     
     
        
         C++
        
        
         
          
           
          
          
         
        
       
       
        
         Concurrency support library
        
        
         
          
           
            
          
          
          
         
        
       
       
              
  | 
             
              
  | 
            |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
        
         
          std::atomic_ref
         
        
        
         
          
           
            
          
          
          
         
        
       
       | Member functions | ||||
| 
               
                
                 
                  
                   atomic_ref::atomic_ref
                  
                 
                
                
               | 
            ||||
| 
               
                
                 
                  
                   (C++26)
                  
                 
                
                
               | 
            ||||
| 
              
               Operations for arithmetic types
                (except 
                bool
               
               and pointer-to-object)
              
              | 
            ||||
| 
              
               Operations for integral types
                (except 
                bool
               
               and pointer-to-object)
              
              | 
            ||||
| 
               
                
                 
                  
                   (C++26)
                  
                 
                
                
               | 
            ||||
| 
               
                
                 
                  
                   (C++26)
                  
                 
                
                
               | 
            ||||
| 
              
               Operations for integral types
                (except 
                bool
               
               )
              
              | 
            ||||
| Constants | ||||
| 
           
           
           
           
            
             explicit
            
            atomic_ref
            
             (
            
            T
            
             &
            
            obj
            
             )
            
            
             ;
            
           
           
          | 
         (1) | (constexpr depuis C++26) | 
| 
           
           
           
           
            atomic_ref
            
             (
            
            
             const
            
            atomic_ref
            
             &
            
            ref
            
             )
            
            
             noexcept
            
            
             ;
            
           
           
          | 
         (2) | (constexpr depuis C++26) | 
       Construit un nouvel objet
       
        atomic_ref
       
       .
      
       
        1)
       
       Construit un objet
       
      
      
        atomic_ref
       
       référençant l'objet
       
        
         obj
        
       
       .
      
       
        2)
       
       Construit un objet
       
      
        atomic_ref
       
       référençant l'objet pointé par
       
        
         ref
        
       
       .
      Paramètres
| obj | - | objet à référencer | 
| ref | - | 
         autre
         
          atomic_ref
         
         objet à copier
         | 
       
Exemple
Le programme incrémente les valeurs dans un conteneur en utilisant plusieurs threads. Ensuite, la somme finale est affichée. Un accès non atomique peut "perdre" les résultats de certaines opérations en raison de courses aux données.
         Exécuter ce code
        
       #include <atomic> #include <iostream> #include <numeric> #include <thread> #include <vector> int main() { using Data = std::vector<char>; auto inc_atomically = [](Data& data) { for (Data::value_type& x : data) { auto xx = std::atomic_ref<Data::value_type>(x); ++xx; // atomic read-modify-write } }; auto inc_directly = [](Data& data) { for (Data::value_type& x : data) ++x; }; auto test_run = [](const auto Fun) { Data data(10'000'000); { std::jthread j1{Fun, std::ref(data)}; std::jthread j2{Fun, std::ref(data)}; std::jthread j3{Fun, std::ref(data)}; std::jthread j4{Fun, std::ref(data)}; } std::cout << "sum = " << std::accumulate(cbegin(data), cend(data), 0) << '\n'; }; test_run(inc_atomically); test_run(inc_directly); }
Sortie possible :
sum = 40000000 sum = 39994973