Guest User

Untitled

a guest
Feb 6th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. use std::sync::atomic::AtomicUsize;
  2. use std::sync::atomic::ATOMIC_USIZE_INIT;
  3. use std::sync::atomic::Ordering;
  4.  
  5. static STATE: AtomicUsize = ATOMIC_USIZE_INIT;
  6. const UNINITIALIZED: usize = 0;
  7. const INITIALIZING: usize = 1;
  8. const INITIALIZED: usize = 2;
  9.  
  10. fn main() {
  11. STATE.store(UNINITIALIZED, Ordering::SeqCst);
  12. println!("STATE ORIGNIAL VALUE {}", STATE.load(Ordering::SeqCst));
  13.  
  14. unsafe {
  15. match STATE.compare_and_swap(UNINITIALIZED, INITIALIZING, Ordering::SeqCst) {
  16. UNINITIALIZED => {
  17. println!("UNINITIALIZED");
  18. STATE.store(INITIALIZED, Ordering::SeqCst);
  19. }
  20. INITIALIZING => {
  21. // unexpected
  22. println!("INITIALIZING {}", STATE.load(Ordering::SeqCst));
  23. }
  24. other => {
  25. println!("OTHER {}", other);
  26. },
  27. };
  28. };
  29.  
  30. println!("STATE AFTER VALUE {}", STATE.load(Ordering::SeqCst));
  31. }
Add Comment
Please, Sign In to add comment