Код: Выделить всё
#include
#include
#include
#include
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();
}
Подробнее здесь: https://stackoverflow.com/questions/782 ... stdatomict