1mod tests;
2
3use std::sync::{Arc, Condvar, Mutex};
4
5#[derive(Debug, Clone)]
6pub struct Locker(Arc<(Mutex<bool>, Condvar)>);
7
8impl Locker {
9 pub fn wait(self) {
10 let pair = self.0;
11 let &(ref lock, ref cvar) = &*pair;
12 let mut started = lock.lock().unwrap();
13 while !*started {
14 started = cvar.wait(started).unwrap();
15 }
16 }
17 pub fn unlock(self) {
18 let pair = self.0;
19 let &(ref lock, ref cvar) = &*pair;
20 let mut started = lock.lock().unwrap();
21 *started = true;
22 cvar.notify_one();
23 }
24 pub fn new() -> Self {
25 Locker(Arc::new((Mutex::new(false), Condvar::new())))
26 }
27}