Rust · Essencial · Inglês · Técnico
Mutex
Trava de exclusão mútua que protege um dado: lock() devolve um guard, e só uma thread por vez acessa o conteúdo. A trava solta quando o guard sai de escopo.
Onde usar
Aparece como Arc<Mutex<T>>. Em Rust o dado fica dentro do Mutex, então não dá para acessá-lo sem travar.
Em código
use std::sync::{Arc, Mutex};
let c = Arc::new(Mutex::new(0));
let c2 = Arc::clone(&c);
std::thread::spawn(move || {
*c2.lock().unwrap() += 1;
}).join().unwrap();
println!("{}", c.lock().unwrap());Exemplos
Lock the mutex only for the update.
Trave o mutex só durante a atualização.
The guard releases the lock when it drops.
O guard solta a trava quando sofre drop.
Cuidado
Segurar o guard por muito tempo bloqueia as outras threads, e segurar um MutexGuard da std atravessando um await torna a future não-Send.
Sinônimos
trava, exclusão mútua
Origem
Contração de mutual exclusion, 'exclusão mútua'.