use std::sync::Arc;
use std::sync::atomic::{AtomicU64, Ordering};
use std::thread;
fn main() {
let counter = Arc::new(AtomicU64::new(0));
let handles: Vec<_> = (0..16).map(|_| {
let c = Arc::clone(&counter);
thread::spawn(move || {
for _ in 0..100_000 {
c.fetch_add(1, Ordering::Relaxed); // Relaxed = no extra synchronization
}
})
}).collect();
for h in handles { h.join().unwrap(); }
println!("final: {}", counter.load(Ordering::Relaxed)); // 1600000
// Relaxed is fine for a counter. Use Acquire/Release for flag-based
// synchronization where the value's order matters.
}
Create a free account and build your private vault. Share publicly whenever you want.