embassy_sync::blocking_mutex::raw

Trait RawMutex

Source
pub unsafe trait RawMutex {
    const INIT: Self;

    // Required method
    fn lock<R>(&self, f: impl FnOnce() -> R) -> R;
}
Expand description

Raw mutex trait.

This mutex is “raw”, which means it does not actually contain the protected data, it just implements the mutex mechanism. For most uses you should use super::Mutex instead, which is generic over a RawMutex and contains the protected data.

Note that, unlike other mutexes, implementations only guarantee no concurrent access from other threads: concurrent access from the current thread is allowed. For example, it’s possible to lock the same mutex multiple times reentrantly.

Therefore, locking a RawMutex is only enough to guarantee safe shared (&) access to the data, it is not enough to guarantee exclusive (&mut) access.

§Safety

RawMutex implementations must ensure that, while locked, no other thread can lock the RawMutex concurrently.

Unsafe code is allowed to rely on this fact, so incorrect implementations will cause undefined behavior.

Required Associated Constants§

Source

const INIT: Self

Create a new RawMutex instance.

This is a const instead of a method to allow creating instances in const context.

Required Methods§

Source

fn lock<R>(&self, f: impl FnOnce() -> R) -> R

Lock this RawMutex.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§