Допустимо ли использование `std::atomic`C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Допустимо ли использование `std::atomic`

Сообщение Гость »

Код: Выделить всё

#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();
}
Гарантированно ли #2 и #3 прочитают значение, записанное в #1? Если это не так, то в чем здесь причина?


Подробнее здесь: https://stackoverflow.com/questions/782 ... stdatomict
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»