19 std::shared_ptr<T> data_;
26 auto current = std::atomic_load(&data_);
27 while (!std::atomic_compare_exchange_weak(&data_, ¤t, p))
33 auto current = std::atomic_load(&data_);
34 while (!std::atomic_compare_exchange_weak(&data_, ¤t, p))
39 bool is_lock_free()
const noexcept
41 return std::atomic_is_lock_free();
44 void store(std::shared_ptr<T> p, std::memory_order order = memory_order_seq_cst) noexcept
46 std::atomic_store_explicit(&data_, p, order);
49 std::shared_ptr<T> load(std::memory_order order = std::memory_order_seq_cst)
const noexcept
51 return std::atomic_load_explicit(&data_, order);
54 std::shared_ptr<T> exchange(std::shared_ptr<T> p,
55 std::memory_order order = std::memory_order_seq_cst) noexcept
57 return std::atomic_exchange_explicit(&data_, p, order);
60 bool compare_exchange_strong(std::shared_ptr<T> &old_value, std::shared_ptr<T> new_value,
61 std::memory_order order = std::memory_order_seq_cst) noexcept;
63 bool compare_exchange_strong(std::shared_ptr<T> &old_value, std::shared_ptr<T> new_value,
64 std::memory_order success_order,
65 std::memory_order failure_order) noexcept;
67 bool compare_exchange_weak(std::shared_ptr<T> &old_value, std::shared_ptr<T> new_value,
68 std::memory_order order = std::memory_order_seq_cst) noexcept;
70 bool compare_exchange_weak(std::shared_ptr<T> &old_value, std::shared_ptr<T> new_value,
71 std::memory_order success_order,
72 std::memory_order failure_order) noexcept;
74 operator std::shared_ptr<T>()
const noexcept