Понимание использования барьеров памяти C++
Барьер std::memory_order_acquire гарантирует, что все операции, такие как чтение / запись, которые идут после барьера, будут выполнены после всех операций чтения (загрузки) перед барьером.
Например, у меня есть следующий код:
#include <iostream>
#include <atomic>
int num = 25;
int getValue()
{
return num;
}
void setValue(int value)
{
num = value;
}
int main()
{
std::atomic<int> n;
int data = getValue();
n.store(data, std::memory_order_acquire);
setValue(100);
std::cout << getValue();
}
Могу ли я быть уверен, что код int data = getValue();
гарантированно будет выполнено до следующего кода?
n.store(data, std::memory_order_acquire);
setValue(100);
std::cout << getValue();
В момент хранения атома, int data = getValue()
гарантированно будет выполнено. Я не ошибаюсь?