ExpertiDict

C++ · Avançado · Inglês · Técnico

memory order

ˈmɛm.ɚ.i ˈɔːɹ.dɚsubstantivo

Parâmetro das operações atômicas, como memory_order_acquire, que define quais garantias de ordenação e visibilidade a operação dá em relação às demais threads.

Onde usar

Usado em estruturas sem lock para pagar só o custo necessário: release na escrita e acquire na leitura bastam para publicar dados entre threads. O padrão seq_cst é o mais forte e o mais seguro.

Em código

std::atomic<bool> ok{false};
int dado = 0;
auto rel = std::memory_order_release;
auto acq = std::memory_order_acquire;
// thread A
dado = 42; ok.store(true, rel);
// thread B
while (!ok.load(acq));  // dado == 42

Exemplos

Store with release and load with acquire to publish the data.

Grave com release e leia com acquire para publicar os dados.

Don't use relaxed unless you can prove it's enough.

Não use relaxed a menos que consiga provar que basta.

Cuidado

Ordens relaxadas só garantem atomicidade, sem ordenar outros acessos; usar relaxed onde se precisa de sincronização causa bugs raros e difíceis de reproduzir.

Sinônimos

ordem de memória

Veja também

Todos os termos de C++