Понимание использования барьеров памяти 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() гарантированно будет выполнено. Я не ошибаюсь?

0 ответов

Другие вопросы по тегам