Atomically accessing primitives
When reading about all of these parallel structures, you might have wondered how they are implemented. In this recipe, we are going to take a look under the hood and learn about the most basic parallel data types, which are called atomics. We are going to do this by implementing our very own Mutex
.
How to do it...
In the folder
bin
, create a file calledatomic.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...