use std::sync::mpsc::channel;
use std::sync::Arc;
use std::thread;
use clhlock::raw::{spins::Mutex, MutexNode};
fn main() {
const N: usize = 10;
let data = Arc::new(Mutex::new(0));
let (tx, rx) = channel();
for _ in 0..N {
let (data, tx) = (data.clone(), tx.clone());
thread::spawn(move || {
let node = MutexNode::new();
let mut guard = data.lock_with(node);
*guard += 1;
if *guard == N {
tx.send(()).unwrap();
}
});
}
let _message = rx.recv();
let count = data.lock();
assert_eq!(*count, N);
}