ExpertiDict

Rust · Essencial · Inglês · Técnico

Mutex

/ˈmjuːtɛks/substantivo

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'.

Veja também

Todos os termos de Rust