thread_locker/
lib.rs

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}