1 use crate::sys::mutex::Mutex;
2 use crate::time::Duration;
4 use super::waitqueue::{SpinMutex, WaitQueue, WaitVariable};
7 inner: SpinMutex<WaitVariable<()>>,
10 pub type MovableCondvar = Box<Condvar>;
13 pub const fn new() -> Condvar {
14 Condvar { inner: SpinMutex::new(WaitVariable::new(())) }
18 pub unsafe fn init(&mut self) {}
21 pub unsafe fn notify_one(&self) {
22 let _ = WaitQueue::notify_one(self.inner.lock());
26 pub unsafe fn notify_all(&self) {
27 let _ = WaitQueue::notify_all(self.inner.lock());
30 pub unsafe fn wait(&self, mutex: &Mutex) {
31 let guard = self.inner.lock();
32 WaitQueue::wait(guard, || mutex.unlock());
36 pub unsafe fn wait_timeout(&self, mutex: &Mutex, dur: Duration) -> bool {
37 let success = WaitQueue::wait_timeout(&self.inner, dur, || mutex.unlock());
43 pub unsafe fn destroy(&self) {}