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