Почему этот забор памяти для приобретения и освобождения не дает постоянного значения?C++

Программы на C++. Форум разработчиков
Anonymous
Почему этот забор памяти для приобретения и освобождения не дает постоянного значения?

Сообщение Anonymous »

Я только изучаю использование ограничений захвата и освобождения памяти и не понимаю, почему иногда я получаю на выходе значение равное нулю, а не значение 2 все время

Я запускал программу несколько раз и предполагал, что атомарное хранилище до барьера освобождения и атомарная загрузка после барьера получения будут гарантировать, что значения всегда будут синхронизироваться

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

#include 
#include 
#include 

std::atomicx;

void write()
{

x.store(2,std::memory_order_relaxed);

std::atomic_thread_fence(std::memory_order_release);

}

void read()
{

std::atomic_thread_fence(std::memory_order_acquire);

// THIS DOES NOT GIVE THE EXPECTED VALUE OF 2 SOMETIMES
std::cout

Подробнее здесь: [url]https://stackoverflow.com/questions/56386448/why-does-this-acquire-and-release-memory-fence-not-give-a-consistent-value[/url]

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