#include #include #include #include struct X { int i; std::string s; }; std::atomic p; std::atomic a; void create_x() { X* x = new X; x->i = 42; x->s = "hello"; a.store(99, std::memory_order_relaxed); p.store(x, std::memory_order_release); } void use_x() { X* x; while (!(x = p.load(std::memory_order_consume))) std::this_thread::sleep_for(std::chrono::microseconds(1)); assert(x->i == 42); assert(x->s == "hello"); assert(a.load(std::memory_order_relaxed) == 99); } int main() { std::thread t1(create_x); std::thread t2(use_x); t1.join(); t2.join(); }