ExpertiDict

Rust · Avançado · Inglês · Técnico

memory ordering

/ˈmɛməri ˈɔːɹdɚɪŋ/substantivo

Argumento Ordering das operações atômicas (Relaxed, Acquire, Release, AcqRel e SeqCst) que define quais escritas ficam visíveis entre threads e em que ordem.

Onde usar

Aparece em estruturas lock-free. Release e Acquire formam um par: o que a thread produtora fez antes do Release fica visível a quem fizer Acquire e enxergar o valor.

Em código

use std::sync::atomic::AtomicBool;
use std::sync::atomic::Ordering::*;
static P: AtomicBool = AtomicBool::new(false);
// produtor: publica com Release
P.store(true, Release);
// consumidor: lê com Acquire
let visto = P.load(Acquire);
println!("{visto}");

Exemplos

Release on the store, Acquire on the load.

Release no store, Acquire no load.

Relaxed is not enough to publish this data.

Relaxed não basta para publicar esses dados.

Cuidado

Relaxed só garante a atomicidade da operação, não a ordem em relação a outros dados.

Sinônimos

ordenação de memória

Veja também

Todos os termos de Rust