mirror of
https://github.com/PacktPublishing/Rust-High-Performance.git
synced 2026-01-25 02:34:19 +09:00
30 lines
755 B
Rust
30 lines
755 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 {
|
|
t_pointer.fetch_add(1, Ordering::Relaxed);
|
|
}
|
|
})
|
|
.expect("could not create the thread");
|
|
|
|
for _ in 0..250_000 {
|
|
pointer.fetch_add(1, 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());
|
|
}
|