typestar

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

  1. Arc::clone sube un conteo de referencias, no copia a fondo.
  2. lock devuelve un guard que destraba al hacer drop.
  3. El guard hace deref al valor de adentro.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 3 en Estado compartido; paso 4 de 15 en Concurrencia y async.

← Anterior Siguiente →