Sujets Rust importants
Rust Arc and Mutex
Let several threads change one value safely: Arc shares it, Mutex guards it.
Ce que vous allez apprendre
- Mutex and lock
- Arc::clone
- Why the count is always right
4 threads x 1000 increments
- 1
Arc::cloneeach thread gets a handle - 2
lock()one at a time - 3
*value += 1safe update - 4
4000always
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.
Points clés
- lock gives one thread access at a time.
- The lock is released when the guard goes out of scope.
- Arc lets every thread own a handle.
Exemple Rust exécutable
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());
}
final count: 4000S'entraîner
Ouvrez l'exemple dans le compilateur en ligne, modifiez une valeur ou ajoutez une ligne, et devinez la sortie avant de l'exécuter. Cassez ensuite le code exprès et lisez le message du compilateur.
Leçon terminée ?
Marquez-la comme apprise pour suivre votre progression.
Votre progression est enregistrée dans ce navigateur Connectez-vous pour la garder sur tous vos appareils.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
Tous les défis