Skip to main content

RawMutex

Struct RawMutex 

Source
pub struct RawMutex(/* private fields */);
Expand description

Mutex types and guards for mutual exclusion. Low-level POSIX mutex: lock/unlock only, no guarded data and no RAII guard. Most application code should use Mutex<T> instead; RawMutex is for callers that need to manage the lock/unlock pairing themselves.

Implementations§

Source§

impl RawMutex

Source

pub fn new() -> Result<Self>

Creates a new, unlocked mutex with priority inheritance enabled.

§Examples
use osal_rs::os::*;
use osal_rs::utils::OsalRsBool;

let mutex = RawMutex::new().unwrap();
assert_eq!(mutex.lock(), OsalRsBool::True);
assert_eq!(mutex.unlock(), OsalRsBool::True);

Trait Implementations§

Source§

impl Debug for RawMutex

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for RawMutex

Source§

type Target = pthread_mutex_t

The resulting type after dereferencing.
Source§

fn deref(&self) -> &MutexHandle

Dereferences the value.
Source§

impl Display for RawMutex

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Drop for RawMutex

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
Source§

impl RawMutex for RawMutex

Source§

fn is_null(&self) -> bool

Returns true if this mutex is never-initialized-or-already-deleted.

§Examples
use osal_rs::os::*;

let mut mutex = RawMutex::new().unwrap();
assert!(!mutex.is_null());

mutex.delete();
assert!(mutex.is_null());
Source§

fn lock(&self) -> OsalRsBool

Locks the mutex, blocking the calling thread until it becomes available. Returns OsalRsBool::True on success.

§Examples
use osal_rs::os::*;
use osal_rs::utils::OsalRsBool;

let mutex = RawMutex::new().unwrap();
assert_eq!(mutex.lock(), OsalRsBool::True);
mutex.unlock();
Source§

fn lock_from_isr(&self) -> OsalRsBool

ISR-safe variant of RawMutex::lock. POSIX has no interrupt context of its own, so this never blocks (trylock instead of lock); it returns OsalRsBool::False if the mutex is already held rather than waiting for it.

§Examples
use osal_rs::os::*;
use osal_rs::utils::OsalRsBool;

let mutex = RawMutex::new().unwrap();
assert_eq!(mutex.lock_from_isr(), OsalRsBool::True);
mutex.unlock_from_isr();
Source§

fn unlock(&self) -> OsalRsBool

Unlocks the mutex. Must be called by the thread that currently holds the lock.

§Examples
use osal_rs::os::*;
use osal_rs::utils::OsalRsBool;

let mutex = RawMutex::new().unwrap();
mutex.lock();
assert_eq!(mutex.unlock(), OsalRsBool::True);
Source§

fn unlock_from_isr(&self) -> OsalRsBool

ISR-safe variant of RawMutex::unlock; identical on POSIX, since unlocking never blocks.

Source§

fn delete(&mut self)

Destroys the underlying pthread mutex and resets it to its “null” state. Safe to call more than once, and called automatically on Drop if not called explicitly.

§Examples
use osal_rs::os::*;

let mut mutex = RawMutex::new().unwrap();
mutex.delete();
assert!(mutex.is_null());
Source§

impl Send for RawMutex

Source§

impl Sync for RawMutex

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.