1use std::sync::{Arc, Mutex};
2use job_pool::ThreadPool;
3
4pub fn main() {
5 const N: i16 = 1024;
6 let pool = ThreadPool::with_size(32).expect("Expected Ok value");
7 let count = Arc::new(Mutex::new(0));
8
9 let inc = |i: i16| {
10 for _ in 0..N {
11 let count = Arc::clone(&count);
12 pool.execute(move || {
13 let mut n = count.lock().unwrap();
14 *n += i;
15 })
16 }
17 };
18
19 let check = |i: i16| {
20 let n = count.lock().unwrap();
21 assert_eq!(*n,i);
22 };
23
24 inc(1);
25 pool.join();
26 check(N);
27
28 inc(-1);
29 pool.join();
30 check(0);
31}