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!
rust thread concurrency join
Commentami!