use crate::sys::sync::mutex::Mutex; /// we do not supported rwlock, so use mutex to simulate rwlock. /// it's useful because so many code in std will use rwlock. pub struct RwLock { inner: Mutex, } impl RwLock { #[inline] pub const fn new() -> RwLock { RwLock { inner: Mutex::new() } } #[inline] pub fn read(&self) { self.inner.lock() } #[inline] pub fn try_read(&self) -> bool { self.inner.try_lock() } #[inline] pub fn write(&self) { self.inner.lock() } #[inline] pub unsafe fn try_write(&self) -> bool { self.inner.try_lock() } #[inline] pub unsafe fn read_unlock(&self) { unsafe { self.inner.unlock() }; } #[inline] pub unsafe fn write_unlock(&self) { unsafe { self.inner.unlock() }; } #[inline] pub unsafe fn downgrade(&self) { // Since there is no difference between read-locked and write-locked on this platform, this // function is simply a no-op as only 1 reader can read: the original writer. } }