.. _module-pw_sync_embos: ============= pw_sync_embos ============= This is a set of backends for pw_sync based on embOS v4. -------------------------------- Critical Section Lock Primitives -------------------------------- Mutex & TimedMutex ================== The embOS v4 backend for the Mutex and TimedMutex use ``OS_RSEMA`` as the underlying type. It is created using ``OS_CreateRSema`` as part of the constructors and cleaned up using ``OS_DeleteRSema`` in the destructors. InterruptSpinLock ================= The embOS v4 backend for InterruptSpinLock is backed by a ``bool`` which permits these objects to detect accidental recursive locking. This object uses ``OS_IncDI`` and ``OS_DecRI`` to mask interrupts which enables the critical section. In addition, ``OS_SuspendAllTasks`` and ``OS_ResumeAllSuspendedTasks`` are used to to prevent accidental thread context switches while the InterruptSpinLock is locked. -------------------- Signaling Primitives -------------------- ThreadNotification & TimedThreadNotification ============================================ The native embOS v4 implementation of its semaphores (``OS_CSEMA``) is very efficient, ergo we recommend using the binary semaphore backends for ThreadNotifications: - ``pw_sync:binary_semaphore_thread_notification_backend`` - ``pw_sync:binary_semaphore_timed_thread_notification_backend`` BinarySemaphore & CountingSemaphore =================================== The embOS v4 backends for the BinarySemaphore and CountingSemaphore use ``OS_CSEMA`` as the underlying type. It is created using ``OS_CreateCSema`` as part of the constructor and cleaned up using ``OS_DeleteCSema`` in the destructor.