Argomenti importanti di Rust

Rust Arc and Mutex

Let several threads change one value safely: Arc shares it, Mutex guards it.

  • Avanzato
  • 3 min di lettura
  • 1 esempio eseguibile
Cosa imparerai
  • Mutex and lock
  • Arc::clone
  • Why the count is always right
4 threads x 1000 increments
  1. 1Arc::cloneeach thread gets a handle
  2. 2lock()one at a time
  3. 3*value += 1safe update
  4. 44000always

One lock, many owners

When threads must change the same value, a Mutex makes sure only one of them touches it at a time. Arc lets every thread own a handle to that Mutex.

Arc::clone gives each thread its own handle to the same counter. lock waits until no other thread holds the lock and returns a guard; the lock is released when the guard goes out of scope. Four threads each add 1000, so the result is always 4000.

Punti chiave

  1. lock gives one thread access at a time.
  2. The lock is released when the guard goes out of scope.
  3. Arc lets every thread own a handle.

Esempio Rust eseguibile

Rust
Esegui il codice →
main.rs
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..1000 {
                let mut value = counter.lock().unwrap();
                *value += 1;
            }
        }));
    }

    for handle in handles {
        handle.join().unwrap();
    }
    println!("final count: {}", *counter.lock().unwrap());
}
Crea un pulsante Run per questo esempio Risultato dell'esecuzione
final count: 4000

Esercitati

Apri l'esempio nel compilatore online, cambia un valore o aggiungi una riga e prova a prevedere l'output prima di eseguirlo. Poi rompi il codice di proposito e leggi il messaggio del compilatore.

Hai finito questa lezione?

Segnala come imparata per tenere traccia dei tuoi progressi.

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide