ExpertiDict

C · Avançado · Português · Técnico

ordem de memória

/ˈoɾ.dẽj dʒi me.ˈmɔ.ɾja/substantivo

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

Veja também

Todos os termos de C