Enum r3::kernel::MutexProtocol

source ·
#[non_exhaustive]
pub enum MutexProtocol {
    None,
    Ceiling(usize),
}
Expand description

Specifies the locking protocol to be followed by a mutex.

This enum type is defined as #[non_exhaustive] to allow for potential future extensions. The function MutexProtocol::is_supported indicates whether a MutexProtocol is supported by the kernel. The behavior is implementation-defined (preferably approximating the request or falling back to a supported option) if a specified MutexProtocol is not supported.

Relation to Other Specifications: The operating systems and operating system specifications providing an interface for specifying a mutex protocol include (but are not limited to) the following: POSIX (pthread_mutexattr_setprotocol and PTHREAD_PRIO_PROTECT, etc.), RTEMS Classic API (RTEMS_PRIORITY_CEILING, etc.), and μITRON4.0 (TA_CEILING, etc.).

Rationale: When this enumerate type was added, the plan was to only support the priority ceiling protocol, so having a method CfgMutexBuilder::ceiling_priority taking a priority ceiling value would have been simpler. Nevertheless, it was decided to use this enumerate type to accomodate other protocols in the future and to allow specifying protocol-specific parameters.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

None

Locking the mutex does not affect the priority of the owning task.

§

Ceiling(usize)

Locking the mutex raises the effective priority of the owning task to the mutex’s priority ceiling according to the immediate priority ceiling protocol. The inner value specifies the priority ceiling.

The value must be in range 0..num_task_priority_levels.

Implementations§

source§

impl MutexProtocol

source

pub const fn is_supported<System>(&self) -> boolwhere System: KernelMutex,

Return a flag indicating whether the kernel supports this MutexProtocol.

It’s possible for this function to return false for all possible values of MutexProtocol if the kernel doesn’t precisely implement any possible options of MutexProtocol.

Trait Implementations§

source§

impl Clone for MutexProtocol

source§

fn clone(&self) -> MutexProtocol

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MutexProtocol

source§

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

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

impl PartialEq<MutexProtocol> for MutexProtocol

source§

fn eq(&self, other: &MutexProtocol) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for MutexProtocol

source§

impl Eq for MutexProtocol

source§

impl StructuralEq for MutexProtocol

source§

impl StructuralPartialEq for MutexProtocol

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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 Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.
source§

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

§

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

The type returned in the event of a conversion error.
const: unstable · source§

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

Performs the conversion.