Многопоточные операции

use std::thread;

let nums1 = vec![123];

let handle = thread::spawn(move || {
        println!("nums1 is {:?}", nums1);
});

//nums1.push(4); <-Error
handle.join().unwrap();

let mut nums2 = vec![123];

std::thread::scope(|s| {
        s.spawn(|| {
                println!("nums2 is {:?}", nums2);
        });
});

nums2.push(4);
println!("nums2 is {:?}", nums2);


Изпользуйте ключевое слово "move" чтобы указать, что переменная передается в дополнительный поток и не будет использоваться в основном.
std::thread::scope обеспечивает необходимую гарантию того, что любые порождённые потоки завершатся до своего возвращения, что позволяет безопасно заимствовать данные.