How to do it...

  1. In the folder bin, create a file called sharing_in_closures.rs.

  2. Add the following code and run it with cargo run --bin sharing_in_closures:

1  use std::thread;
2 use std::sync::Arc;
3
4 fn main() {
5 // An Arc ("Atomically Reference Counted") is used the exact
6 // same way as an Rc, but also works in a parallel context
7 let some_resource = Arc::new("Hello World".to_string());
8
9 // We use it to give a new thread ownership of a clone of the
Arc
10 let thread_a = {
11 // It is very common to give the clone the same name as the
original
12 let some_resource = some_resource.clone();
13 // The clone is then moved into the closure:
14 thread::spawn(move || {
15 println!("Thread A says: {}", some_resource);
16 })
17 };
18 let thread_b = {
19 let some_resource = some_resource.clone();
20 thread::spawn(move || {
21 println!("Thread B says: {}", some_resource);
22 })
23 };
24
25 // .join() blocks the main thread until the other thread is done
26 thread_a.join().expect("Thread A panicked");
27 thread_b.join().expect("Thread B panicked");
28 }
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.219.249.210