Moving data between threads

We saw with the Send and Sync traits that the first one allows for a variable to be sent between threads, but how does that work? Can we just use a variable created in the main thread inside our secondary thread? Let's try it:

use std::thread;fn main() {    let my_vec = vec![10, 33, 54];    let handle = thread::Builder::new()        .name("my thread".to_owned())        .spawn(|| {            println!("This is my vector: {:?}", my_vec);        })        .expect("could not create the thread");    if handle.join().is_err() {        println!("Something bad happened :(");    }}

What we did was create a vector outside the thread and then use it from inside. But it seems it does not work. Let's see what the compiler tells us:

That's interesting. The compiler noticed that the ...

Get Rust High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.