Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::sync::atomic::AtomicUsize;
- use std::sync::atomic::ATOMIC_USIZE_INIT;
- use std::sync::atomic::Ordering;
- static STATE: AtomicUsize = ATOMIC_USIZE_INIT;
- const UNINITIALIZED: usize = 0;
- const INITIALIZING: usize = 1;
- const INITIALIZED: usize = 2;
- fn main() {
- STATE.store(UNINITIALIZED, Ordering::SeqCst);
- println!("STATE ORIGNIAL VALUE {}", STATE.load(Ordering::SeqCst));
- unsafe {
- match STATE.compare_and_swap(UNINITIALIZED, INITIALIZING, Ordering::SeqCst) {
- UNINITIALIZED => {
- println!("UNINITIALIZED");
- STATE.store(INITIALIZED, Ordering::SeqCst);
- }
- INITIALIZING => {
- // unexpected
- println!("INITIALIZING {}", STATE.load(Ordering::SeqCst));
- }
- other => {
- println!("OTHER {}", other);
- },
- };
- };
- println!("STATE AFTER VALUE {}", STATE.load(Ordering::SeqCst));
- }
Add Comment
Please, Sign In to add comment