Usare i thread in Rust

Mattepuffo's logo
Usare i thread in Rust

Usare i thread in Rust

Rust nasce come linguaggio che deve essere molto veloce; fa un largo uso dei thread e della programmazione concorrente, e lo fa in maniera molto efficace.

Oggi vedremo un esempio, ovviamente basilare, ma utile per partire.

Cominciamo:

use std::thread;
use std::time::Duration;

fn main() {
    thread::spawn(|| {
        for i in 1..10 {
            println!("Numero {} dal thread", i);
            thread::sleep(Duration::from_millis(1));
        }
    });

    for i in 1..5 {
        println!("Numero {} dal MAIN thread", i);
        thread::sleep(Duration::from_millis(1));
    }
}

Abbiamo due cicli for, uno eseguito dal thread principale, e l'altro dal thread secondario creato con spawn.

Questa funzione ha come parametro una closure, ed esegue il codice impostato per quel thread.

Se notate bene, i due cicli non sono uguali; ma il thread secondario non conterà fino a 10, in quanto viene stoppato quando termina quello principale.

Per ovviare a questo problema, possiamo usare la funzione join:

use std::thread;
use std::time::Duration;

fn main() {
    let join_handle = thread::spawn(|| {
        for i in 1..10 {
            println!("Numero {} dal thread", i);
            thread::sleep(Duration::from_millis(1));
        }
    });

    for i in 1..5 {
        println!("Numero {} dal MAIN thread", i);
        thread::sleep(Duration::from_millis(1));
    }

    join_handle.join().unwrap();
}

In questo modo il programma terminerà solo quando tutti i thread hanno finito; e quindi non dipende tutto dal main thread.

Enjoy!


Condividi

Commentami!