hermit_sync/mutex/
mod.rs

1#[cfg(not(feature = "all-one-shot"))]
2pub(crate) mod spin {
3    /// A simple spinlock with exponential backoff.
4    pub type RawSpinMutex = spinning_top::RawSpinlock<spinning_top::relax::Backoff>;
5
6    /// A [`lock_api::Mutex`] based on [`RawSpinMutex`].
7    pub type SpinMutex<T> = lock_api::Mutex<RawSpinMutex, T>;
8
9    /// A [`lock_api::MutexGuard`] based on [`RawSpinMutex`].
10    pub type SpinMutexGuard<'a, T> = lock_api::MutexGuard<'a, RawSpinMutex, T>;
11}
12#[cfg(feature = "all-one-shot")]
13pub(crate) mod spin {
14    pub use one_shot_mutex::{
15        OneShotMutex as SpinMutex, OneShotMutexGuard as SpinMutexGuard,
16        RawOneShotMutex as RawSpinMutex,
17    };
18}
19#[cfg(not(feature = "all-one-shot"))]
20pub(crate) mod ticket;
21#[cfg(feature = "all-one-shot")]
22pub(crate) mod ticket {
23    pub use one_shot_mutex::{
24        OneShotMutex as TicketMutex, OneShotMutexGuard as TicketMutexGuard,
25        RawOneShotMutex as RawTicketMutex,
26    };
27}
28
29use interrupt_mutex::RawInterruptMutex;
30use one_shot_mutex::RawOneShotMutex;
31use spin::RawSpinMutex;
32use ticket::RawTicketMutex;
33
34/// An interrupt-safe [`RawOneShotMutex`].
35pub type RawInterruptOneShotMutex = RawInterruptMutex<RawOneShotMutex>;
36
37/// A [`lock_api::Mutex`] based on [`RawInterruptOneShotMutex`].
38pub type InterruptOneShotMutex<T> = lock_api::Mutex<RawInterruptOneShotMutex, T>;
39
40/// A [`lock_api::MutexGuard`] based on [`RawInterruptOneShotMutex`].
41pub type InterruptOneShotMutexGuard<'a, T> = lock_api::MutexGuard<'a, RawInterruptOneShotMutex, T>;
42
43/// An interrupt-safe [`RawSpinMutex`].
44pub type RawInterruptSpinMutex = RawInterruptMutex<RawSpinMutex>;
45
46/// A [`lock_api::Mutex`] based on [`RawInterruptSpinMutex`].
47pub type InterruptSpinMutex<T> = lock_api::Mutex<RawInterruptSpinMutex, T>;
48
49/// A [`lock_api::MutexGuard`] based on [`RawInterruptSpinMutex`].
50pub type InterruptSpinMutexGuard<'a, T> = lock_api::MutexGuard<'a, RawInterruptSpinMutex, T>;
51
52/// An interrupt-safe [`RawTicketMutex`].
53pub type RawInterruptTicketMutex = RawInterruptMutex<RawTicketMutex>;
54
55/// A [`lock_api::Mutex`] based on [`RawInterruptTicketMutex`].
56pub type InterruptTicketMutex<T> = lock_api::Mutex<RawInterruptTicketMutex, T>;
57
58/// A [`lock_api::MutexGuard`] based on [`RawInterruptTicketMutex`].
59pub type InterruptTicketMutexGuard<'a, T> = lock_api::MutexGuard<'a, RawInterruptTicketMutex, T>;