Retour à la leçonMission
Mission : un compteur de ventes concurrent qui ne compile pas
Diagnostiquer des erreurs de compilation liees a Rc et move dans un contexte multi-thread, et les corriger avec Arc et Mutex.
Contexte
Un dev veut lancer 20 threads qui incrementent chacun un compteur partage de ventes du jour, puis afficher le total. Il ecrit :
rust
use std::rc::Rc;
use std::cell::RefCell;
use std::thread;
fn main() {
let compteur = Rc::new(RefCell::new(0));
let mut handles = vec![];
for _ in 0..20 {
let compteur = Rc::clone(&compteur);
let handle = thread::spawn(|| {
*compteur.borrow_mut() += 1;
});
handles.push(handle);
}
for h in handles { h.join().unwrap(); }
println!("{}", compteur.borrow());
}Le compilateur refuse de compiler avec plusieurs erreurs liees a Send/Sync et a la duree de vie de compteur. Corrige ce code pour qu'il compile et fonctionne correctement.