Atomic Operations for Lock-Free Code
Atomic Operations for Lock-Free Code
For primitive integer updates, atomic instructions offer ultra-low latency lock-free synchronization:
use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::thread;
fn main() {
let atomic_val = Arc::new(AtomicUsize::new(0));
let mut handles = vec![];
for _ in 0..4 {
let val_clone = Arc::clone(&atomic_val);
handles.push(thread::spawn(move || {
val_clone.fetch_add(1, Ordering::SeqCst);
}));
}
for h in handles { h.join().unwrap(); }
println!("Atomic total: {}", atomic_val.load(Ordering::SeqCst));
}