struct Node{ int value; std::atomic next; }; int main(){ std::atomic ptr = (Node*)0; auto t1 = std::thread([&ptr](){ auto r = new Node{1,std::atomic{(Node*)nullptr}}; // #1 ptr.store(r,std::memory_order::relaxed); }); auto t2 = std::thread([&ptr](){ Node* r = nullptr; while(r==nullptr){ r = ptr.load(std::memory_order::relaxed); } assert(r->value == 1); // #2 assert(r->next.load(std::memory_order::relaxed) == nullptr); // #3 }); t1.join(); t2.join(); } [/code] Гарантированно ли #2 и #3 прочитают значение, записанное в #1? Если это не так, то в чем здесь причина?