Rust · Avançado · Inglês · Técnico
data race
Acesso simultâneo de duas threads ao mesmo dado, com ao menos uma escrita, sem sincronização. O Rust seguro elimina data races na compilação, com Send, Sync e empréstimos.
Onde usar
É citado como o motivo de Rust ser seguro para concorrência. Em review, o compilador já barra o caso comum.
Em código
// compartilhar &mut entre threads não compila
let mut n = 0;
// std::thread::spawn(|| n += 1);
// erro: a closure pode sobreviver a n
// com Mutex ou atômicos, compila
let m = std::sync::Mutex::new(0);
*m.lock().unwrap() += 1;Exemplos
Safe Rust can't have a data race.
Rust seguro não pode ter data race.
A race condition is still possible without a data race.
Ainda é possível ter race condition sem data race.
Cuidado
Data race não é o mesmo que race condition: a ordem lógica das operações ainda pode estar errada, mesmo sem corrida de dados.
Sinônimos
corrida de dados