10#ifndef STK_SYNC_SEMAPHORE_H_
11#define STK_SYNC_SEMAPHORE_H_
133 bool success =
false;
139 __stk_full_memfence();
143 else if (timeout_ticks !=
NO_WAIT)
174 __stk_full_memfence();
#define STK_NONCOPYABLE_CLASS(TYPE)
Disables copy construction and assignment for a class.
#define STK_ASSERT(e)
Runtime assertion. Halts execution if the expression e evaluates to false.
#define STK_VIRT_DTOR
Makes destructors virtual and compliant to strict rules if STK_STRICT_COMPLIANCY=0.
Implementation of synchronization primitive: stk::sync::ScopedCriticalSection.
Namespace of STK package.
static constexpr Timeout NO_WAIT
Timeout value: return immediately if the synchronization object is not yet signaled (non-blocking pol...
@ WAIT_RESULT_SIGNAL
The wake was caused by a signal.
int32_t Timeout
Timeout time (ticks).
static constexpr Timeout WAIT_INFINITE
Timeout value: block indefinitely until the synchronization object is signaled.
bool IsInsideISR()
Check whether the CPU is currently executing inside a hardware interrupt service routine (ISR).
Synchronization primitives for task coordination and resource protection.
static IKernelService * GetInstance()
Get CPU-local instance of the kernel service.
virtual EWaitResult Wait(ISyncObject *sobj, IMutex *mutex, Timeout timeout)=0
Put calling process into a waiting state until synchronization object is signaled or timeout occurs.
SyncObjectBase()
Constructor.
IWaitObject::ListHeadType m_wait_list
Tasks blocked on this object.
void WakeOne() override
Wake the first task in the wait list (FIFO order).
RAII-style low-level synchronization primitive for atomic code execution. Used as building brick for ...
void Signal()
Post a signal (increment counter).
uint16_t m_count_max
Counter max limit.
uint16_t m_count
Internal resource counter.
uint16_t GetCount() const
Get current counter value.
static const uint16_t COUNT_MAX
Max count value supported.
bool Wait(Timeout timeout_ticks=WAIT_INFINITE)
Wait for a signal (decrement counter).
Semaphore(uint16_t initial_count=0U, uint16_t max_count=COUNT_MAX)
Constructor.
bool TryWait()
Poll the semaphore without blocking (decrement counter if available).