Spesso, quando delegato il lavoro ai thread, ho un dato che sopravvivrà a tutti i thread. Un esempio potrebbe essere numbers
nel seguente esempio:È possibile condividere dati con thread senza clonazione?
use std::thread;
fn main() {
let numbers = vec![1, 2, 3];
let thread_a = thread::spawn(|| { println!("{}", numbers.len()); });
let thread_b = thread::spawn(|| { println!("{}", numbers.len()); });
thread_a.join().unwrap();
thread_b.join().unwrap();
}
Non è modificato da nessuna parte, ed a causa delle join
s, è garantito che i fili sono fatte di usarlo. Tuttavia, il controllore del prestito di Rust non è in grado di dirlo.
Le soluzioni che ho visto finora riguardano la clonazione di un dato (o la clonazione di un Arc
dei dati). È possibile farlo senza clonazione?
Bene, per mettere qualcosa in 'Arc' tu * fai * eseguire un'assegnazione. –
@MatthieuM. Buon punto; aggiunto una nota. –