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::access_static_option;
use osal_rs::os::*;

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
}

// Initialization phase: create the mutex before anyone locks it.
unsafe { MUTEX = Some(RawMutex::new().unwrap()) };

critical_section();
critical_section(); // the previous lock was released on drop

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§

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.