Arc y Mutex en Rust
Arc comparte la propiedad entre hilos; Mutex vuelve segura la mutación.
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let counter = Arc::new(Mutex::new(0));
let mut handles = Vec::new();
for _ in 0..4 {
let counter = Arc::clone(&counter);
handles.push(thread::spawn(move || {
for _ in 0..1_000 {
let mut n = counter.lock().unwrap();
*n += 1;
}
}));
}
for h in handles {
h.join().unwrap();
}
println!("{}", *counter.lock().unwrap());
}
Cómo funciona
Arc::clonesube un conteo de referencias, no copia a fondo.lockdevuelve un guard que destraba al hacer drop.- El guard hace deref al valor de adentro.
Palabras clave y builtins usados aquí
Vecfnforinletmovemutuse
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 377
- Tokens
- 145
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 83 segundos.
Paso 1 de 3 en Estado compartido; paso 4 de 15 en Concurrencia y async.