Counter with threads (shared variable) using Mutex
-
Solution is using Mutex
-
This solution is actually slower than the single-threaded solution because the the threads are waiting for each other to free the guards.
fn main() { let limit = 1_000_000; let threads = 10; let result = count_with_mutex(threads, limit); println!("{}", result); assert_eq!(result, limit * threads); } fn count_with_mutex(threads: i32, limit: i32) -> i32 { let counter = std::sync::Mutex::new(0); std::thread::scope(|scope| { for _ in 0..threads { scope.spawn(|| { println!("Start {:?}", std::thread::current().id()); for _ in 0..limit { let mut guarded_counter = counter.lock().unwrap(); *guarded_counter += 1; } }); } }); counter.into_inner().unwrap() }
Start ThreadId(2)
Start ThreadId(5)
Start ThreadId(4)
Start ThreadId(6)
Start ThreadId(3)
Start ThreadId(7)
Start ThreadId(9)
Start ThreadId(8)
Start ThreadId(10)
Start ThreadId(11)
10000000
- Mutex
- lock