C · Avançado · Português · Técnico
ordem de memória
Argumento memory_order das operações atômicas que define quais acessos à memória outras threads podem ver reordenados. O padrão seq_cst é o mais forte; acquire e release são mais leves.
Onde usar
Em estruturas lock-free, publica-se um dado com store release e lê-se com load acquire. Em review se desconfia de memory_order_relaxed fora de simples contadores.
Em código
#include <stdatomic.h>
int dado;
atomic_int pronto;
void produz(void) {
dado = 42;
atomic_store_explicit(&pronto, 1,
memory_order_release);
}Exemplos
Publica o dado com store release e lê com load acquire.
Deixa a ordem de memória no padrão seq_cst até medir que dá problema.
Cuidado
Usar relaxed para sincronizar dados: ele garante só atomicidade, sem ordenar o resto da memória.
Sinônimos
memory order