Skip to main content

RawMutexGuard

Struct RawMutexGuard 

Source
pub struct RawMutexGuard<M: RawMutex + 'static>(/* private fields */);
Expand description

All OSAL trait definitions for advanced usage. RAII guard for a 'static RawMutex implementation.

Locks the mutex on construction and unlocks it on drop, so callers only need to hold on to the guard for the duration of the critical section. This is intended for the common pattern of a module-level static mut Option<M> mutex guarding a module-level static mut resource, e.g. obtained via access_static_option!.

§Examples

use osal_rs::traits::RawMutexGuard;
use osal_rs::{access_static_option, os::RawMutex};

static mut MUTEX: Option<RawMutex> = None;

fn critical_section() {
    let _lock = RawMutexGuard::acquire(access_static_option!(MUTEX));
    // protected code here, lock released when `_lock` drops
}

Implementations§

Source§

impl<M: RawMutex + 'static> RawMutexGuard<M>

Source

pub fn acquire(mutex: &'static M) -> Self

Locks mutex and returns a guard that unlocks it on drop.

Source

pub fn acquire_from_isr(mutex: &'static M) -> Self

Locks mutex via RawMutex::lock_from_isr instead of RawMutex::lock, and returns a guard that unlocks the same way on drop. Use this instead of RawMutexGuard::acquire when the calling context is (or might be) an interrupt handler.

Trait Implementations§

Source§

impl<M: RawMutex + 'static> Drop for RawMutexGuard<M>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<M> Freeze for RawMutexGuard<M>

§

impl<M> RefUnwindSafe for RawMutexGuard<M>
where M: RefUnwindSafe,

§

impl<M> Send for RawMutexGuard<M>
where M: Sync,

§

impl<M> Sync for RawMutexGuard<M>
where M: Sync,

§

impl<M> Unpin for RawMutexGuard<M>

§

impl<M> UnsafeUnpin for RawMutexGuard<M>

§

impl<M> UnwindSafe for RawMutexGuard<M>
where M: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.