SDL3pp
A slim C++ wrapper for SDL3
|
A means to manage access to a resource, by count, between threads. More...
Public Member Functions | |
constexpr | Semaphore ()=default |
Default ctor. | |
constexpr | Semaphore (const SemaphoreRaw resource) |
Constructs from SemaphoreParam. More... | |
constexpr | Semaphore (const Semaphore &other)=delete |
Copy constructor. | |
constexpr | Semaphore (Semaphore &&other) |
Move constructor. | |
constexpr | Semaphore (const SemaphoreRef &other)=delete |
constexpr | Semaphore (SemaphoreRef &&other)=delete |
Semaphore (Uint32 initial_value) | |
Create a semaphore. More... | |
~Semaphore () | |
Destructor. | |
Semaphore & | operator= (Semaphore other) |
Assignment operator. | |
constexpr SemaphoreRaw | get () const |
Retrieves underlying SemaphoreRaw. | |
constexpr SemaphoreRaw | release () |
Retrieves underlying SemaphoreRaw and clear this. | |
constexpr auto | operator<=> (const Semaphore &other) const =default |
Comparison. | |
constexpr bool | operator== (std::nullptr_t _) const |
Comparison. | |
constexpr | operator bool () const |
Converts to bool. | |
constexpr | operator SemaphoreParam () const |
Converts to SemaphoreParam. | |
void | Destroy () |
Destroy a semaphore. More... | |
void | Wait () |
Wait until a semaphore has a positive value and then decrements it. More... | |
bool | TryWait () |
See if a semaphore has a positive value and decrement it if it does. More... | |
bool | WaitTimeout (std::chrono::milliseconds timeout) |
Wait until a semaphore has a positive value and then decrements it. More... | |
void | Signal () |
Atomically increment a semaphore's value and wake waiting threads. More... | |
Uint32 | GetValue () const |
Get the current value of a semaphore. More... | |
Semaphores (specifically, "counting semaphores"), let X number of threads request access at the same time, each thread granted access decrementing a counter. When the counter reaches zero, future requests block until a prior thread releases their request, incrementing the counter again.
Wikipedia has a thorough explanation of the concept:
https://en.wikipedia.org/wiki/Semaphore_(programming)
|
inlineexplicitconstexpr |
resource | a SemaphoreRaw to be wrapped. |
This assumes the ownership, call release() if you need to take back.
|
inline |
This function creates a new semaphore and initializes it with the value initial_value
. Each wait operation on the semaphore will atomically decrement the semaphore value and potentially block if the semaphore value is 0. Each post operation will atomically increment the semaphore value and wake waiting threads and allow them to retry the wait operation.
initial_value | the starting value of the semaphore. |