Arc<Mutex<T>> — complex types. Arc<AtomicX> — simple atomics.
Arc<Mutex<T>>:
Arc<AtomicX>:
1use std::sync::{Arc, Mutex};2use std::sync::atomic::{AtomicU64, Ordering};34// Counter with Mutex5let counter = Arc::new(Mutex::new(0u64));6let counter_clone = Arc::clone(&counter);7std::thread::spawn(move || {8 *counter_clone.lock().unwrap() += 1;9});1011// Counter with AtomicU6412let counter = Arc::new(AtomicU64::new(0));13let counter_clone = Arc::clone(&counter);14std::thread::spawn(move || {15 counter_clone.fetch_add(1, Ordering::SeqCst);16});
Key: Atomics for counters, Mutex for complex data.