Type Definition r3::sync::mutex::StaticMutex
source · pub type StaticMutex<System, T> = GenericMutex<Hunk<System, UnsafeCell<MaybeUninit<T>>>, StaticMutex<System>>;
Available on crate feature
sync
only.Expand description
A defined (statically created) GenericMutex
.
Example
use r3::{kernel::StaticTask, sync::StaticMutex};
struct Objects {
task2: StaticTask<System>,
mutex: StaticMutex<System, i32>,
}
const fn configure_app<C>(cfg: &mut Cfg<C>) -> Objects
where
C: ~const traits::CfgTask<System = System> +
~const traits::CfgMutex,
{
StaticTask::define()
.start(task1_body)
.priority(2)
.active(true)
.finish(cfg);
let task2 = StaticTask::define()
.start(task2_body)
.priority(1)
.finish(cfg);
let mutex = StaticMutex::define().init(|| 1).finish(cfg);
Objects { task2, mutex }
}
fn task1_body() {
let mut guard = COTTAGE.mutex.lock().unwrap();
// Although `task2` has a higher priority, it's unable to
// access `*guard` until `task1` releases the lock
COTTAGE.task2.activate().unwrap();
assert_eq!(*guard, 1);
*guard = 2;
}
fn task2_body() {
let mut guard = COTTAGE.mutex.lock().unwrap();
assert_eq!(*guard, 2);
*guard = 3;
}
Implementations§
source§impl<System, T: 'static> StaticMutex<System, T>where
System: KernelMutex + KernelStatic,
impl<System, T: 'static> StaticMutex<System, T>where System: KernelMutex + KernelStatic,
sourcepub const fn define() -> Definer<System, DefaultSource<T>>
pub const fn define() -> Definer<System, DefaultSource<T>>
Construct a Definer
to define a mutex in a configuration
function.