Files
Rust-High-Performance/Chapter10/example9.rs
2018-03-28 11:19:46 +05:30

34 lines
949 B
Rust

use std::thread;
use std::sync::Arc;
use std::sync::atomic::{AtomicUsize, Ordering};
fn main() {
let my_val = AtomicUsize::new(0);
let pointer = Arc::new(my_val);
let t_pointer = pointer.clone();
let handle = thread::Builder::new()
.name("my thread".to_owned())
.spawn(move || {
for _ in 0..250_000 {
let cur_value = t_pointer.load(Ordering::Relaxed);
let sum = cur_value + 1;
t_pointer.store(sum, Ordering::Relaxed);
}
})
.expect("could not create the thread");
for _ in 0..250_000 {
let cur_value = pointer.load(Ordering::Relaxed);
let sum = cur_value + 1;
pointer.store(sum, Ordering::Relaxed);
}
if handle.join().is_err() {
println!("Something bad happened :(");
}
let a_int = Arc::try_unwrap(pointer).unwrap();
println!("Final number: {}", a_int.into_inner());
}