-
In the folder bin, create a file called atomic.rs.
-
Add the following code and run it with cargo run --bin atomic:
1 use std::sync::Arc;
2 use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering, ATOMIC_BOOL_INIT, ATOMIC_USIZE_INIT};
3 use std::thread;
4 use std::ops::{Deref, DerefMut};
5 use std::cell::UnsafeCell;
6
7 fn main() {
8 // Atomics are primitive types suited for
9 // well defined concurrent behaviour
10 let some_number = AtomicUsize::new(0);
11 // They are usually initialized by copying them from
12 // their global constants, so the following line does the same:
13 let some_number = ATOMIC_USIZE_INIT;
14
15 // load() gets the current value of the atomic
16 // Ordering tells the compiler how exactly to handle the
interactions
17 // with other threads. SeqCst ("Sequentially Consistent") can
always be used
18 // as it results in the same thing as if no parallelism was
involved
19 let curr_val = some_number.load(Ordering::SeqCst);
20...