32 lines
662 B
Rust
32 lines
662 B
Rust
use crate::cell::Cell;
|
|
|
|
pub struct Mutex {
|
|
// This platform has no threads, so we can use a Cell here.
|
|
locked: Cell<bool>,
|
|
}
|
|
|
|
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 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 fn try_lock(&self) -> bool {
|
|
self.locked.replace(true) == false
|
|
}
|
|
}
|