Rust · Avançado · Inglês · Técnico
memory ordering
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