std::experimental::atomic_shared_ptr
From cppreference.com
                    
                                        
                    < cpp | experimental
                    
                                                            
                    | Defined in header  <experimental/atomic> | ||
| template < class T > class atomic_shared_ptr; | (concurrency TS) | |
The class template atomic_shared_ptr provides thread-safe atomic pointer operations over a std::shared_ptr. It provides a better alternative to the non-member shared_ptr atomic access functions.
[edit] Member functions
| constructs an atomic_shared_ptrobject(public member function) | |
| stores a value into an atomic_shared_ptrobject(public member function) | |
| checks if the atomic_shared_ptrobject is lock-free(public member function) | |
| atomically replaces the value of the atomic object with a non-atomic argument (public member function) | |
| atomically obtains the value of the atomic object (public member function) | |
| loads a value from an atomic object (public member function) | |
| atomically replaces the value of the atomic object and obtains the value held previously (public member function) | |
| atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not (public member function) |