ExpertiDict

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

mutex poisoning

/ˈmjuːtɛks ˈpɔɪzənɪŋ/substantivo

Estado em que um Mutex da std fica envenenado quando uma thread dá panic segurando a trava. O lock() passa a devolver Err, e o dado ainda pode ser recuperado.

Onde usar

É o motivo de se ver lock().unwrap() em todo lugar. Em código crítico, decide-se se continua com o dado ou se aborta.

Em código

let m = std::sync::Mutex::new(0);
std::thread::scope(|s| {
  let _ = s.spawn(|| {
    let _g = m.lock().unwrap();
    panic!("falha");
  }).join();
});
println!("{}", m.is_poisoned());

Exemplos

The mutex is poisoned after the panic.

O mutex fica envenenado depois do panic.

Recover the data with into_inner on the error.

Recupere o dado com into_inner no erro.

Cuidado

O envenenamento é um aviso, não uma proteção: o dado pode estar inconsistente, mas continua acessível.

Sinônimos

trava envenenada

Veja também

Todos os termos de Rust