Skip to content

Instantly share code, notes, and snippets.

@thomcc
Created December 31, 2020 23:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thomcc/6afe4a89ab5eaeb83af51b53fbd4998b to your computer and use it in GitHub Desktop.
Save thomcc/6afe4a89ab5eaeb83af51b53fbd4998b to your computer and use it in GitHub Desktop.
static A: AtomicU8 = AtomicU8::new(0);
static B: AtomicU8 = AtomicU8::new(0);
const ORDER: Ordering = ???;
let writer_0 = thread::spawn(|| {
A.store(1, ORDER);
});
let writer_1 = thread::spawn(|| {
B.store(1, ORDER);
});
let reader_0 = thread::spawn(|| -> bool {
let a = A.load(ORDER);
let b = B.load(ORDER);
// `writer_0` went first
a == 1 && b == 0
});
let reader_1 = thread::spawn(|| -> bool {
let a = A.load(ORDER);
let b = B.load(ORDER);
// `writer_1` went first.
a == 0 && b == 1
});
writer_0.join().unwrap();
writer_1.join().unwrap();
let writer_0_was_first = reader_0.join().unwrap();
let writer_1_was_first = reader_1.join().unwrap();
assert!(!(writer_0_was_first && writer_1_was_first));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment