use std::sync::mpsc::channel;
use std::sync::Arc;
use std::thread;
use mcslock::raw::spins::Mutex;
mcslock::thread_local_node! {
pub static NODE;
static UNUSED_NODE;
}
const N: usize = 10;
fn main() {
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 || {
data.lock_with_local_then(&NODE, |data| {
*data += 1;
if *data == N {
tx.send(()).unwrap();
}
});
});
}
let _message = rx.recv();
let count = data.lock_with_local_then(&NODE, |data| *data);
assert_eq!(count, N);
}