threading/
threading.rs

1use ref_kman::Ref;
2
3fn main() {
4    let data = Ref::new(0);
5    let tmp_data = data.clone();
6
7    let thread_1 = std::thread::spawn(move || {
8        let data = tmp_data;
9        for _ in 0..10000000 {
10            let mut data = data.get_mut();
11            *data += 1;
12        }
13    });
14
15    let tmp_data = data.clone();
16
17    let thread_2 = std::thread::spawn(move || {
18        let data = tmp_data;
19        for _ in 0..10000000 {
20            data.mut_scope(|data| {
21                *data += 1;
22            })
23        }
24    });
25
26    let tmp_data = data.clone();
27
28    let thread_3 = std::thread::spawn(move || {
29        let data = tmp_data;
30        loop {
31            if *data == 20000000 {
32                break;
33            }
34            println!("D: {}", data);
35        }
36    });
37
38    thread_1.join().unwrap();
39    thread_2.join().unwrap();
40    thread_3.join().unwrap();
41
42    println!("Data: {}", data)
43}