use crate::cell::Cell; pub struct Mutex { // This platform has no threads, so we can use a Cell here. locked: Cell, } pub type MovableMutex = Mutex; unsafe impl Send for Mutex {} unsafe impl Sync for Mutex {} // no threads on this platform impl Mutex { #[inline] pub const fn new() -> Mutex { Mutex { locked: Cell::new(false) } } #[inline] pub unsafe fn init(&mut self) {} #[inline] pub unsafe fn lock(&self) { assert_eq!(self.locked.replace(true), false, "cannot recursively acquire mutex"); } #[inline] pub unsafe fn unlock(&self) { self.locked.set(false); } #[inline] pub unsafe fn try_lock(&self) -> bool { self.locked.replace(true) == false } }