use crate::cell::UnsafeCell;
use crate::sys::c;
pub struct Mutex {
srwlock: UnsafeCell<c::SRWLOCK>,
}
unsafe impl Send for Mutex {}
unsafe impl Sync for Mutex {}
#[inline]
pub unsafe fn raw(m: &Mutex) -> c::PSRWLOCK {
m.srwlock.get()
}
impl Mutex {
#[inline]
pub const fn new() -> Mutex {
Mutex { srwlock: UnsafeCell::new(c::SRWLOCK_INIT) }
}
#[inline]
pub fn lock(&self) {
unsafe {
c::AcquireSRWLockExclusive(raw(self));
}
}
#[inline]
pub fn try_lock(&self) -> bool {
unsafe { c::TryAcquireSRWLockExclusive(raw(self)) != 0 }
}
#[inline]
pub unsafe fn unlock(&self) {
c::ReleaseSRWLockExclusive(raw(self));
}
}