Retour à la leçon
Mission

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.