1 use crate::cell
::UnsafeCell
;
3 use crate::sys
::mutex
::{self, Mutex}
;
5 use crate::time
::Duration
;
8 inner
: UnsafeCell
<c
::CONDITION_VARIABLE
>,
11 pub type MovableCondvar
= Condvar
;
13 unsafe impl Send
for Condvar {}
14 unsafe impl Sync
for Condvar {}
17 pub const fn new() -> Condvar
{
18 Condvar { inner: UnsafeCell::new(c::CONDITION_VARIABLE_INIT) }
22 pub unsafe fn init(&mut self) {}
25 pub unsafe fn wait(&self, mutex
: &Mutex
) {
26 let r
= c
::SleepConditionVariableSRW(self.inner
.get(), mutex
::raw(mutex
), c
::INFINITE
, 0);
27 debug_assert
!(r
!= 0);
30 pub unsafe fn wait_timeout(&self, mutex
: &Mutex
, dur
: Duration
) -> bool
{
31 let r
= c
::SleepConditionVariableSRW(
34 super::dur2timeout(dur
),
38 debug_assert_eq
!(os
::errno() as usize, c
::ERROR_TIMEOUT
as usize);
46 pub unsafe fn notify_one(&self) {
47 c
::WakeConditionVariable(self.inner
.get())
51 pub unsafe fn notify_all(&self) {
52 c
::WakeAllConditionVariable(self.inner
.get())
55 pub unsafe fn destroy(&self) {