SDL3pp
A slim C++ wrapper for SDL3
Loading...
Searching...
No Matches
Public Member Functions | List of all members
SDL::Semaphore Class Reference

A means to manage access to a resource, by count, between threads. More...

Inheritance diagram for SDL::Semaphore:
Inheritance graph
[legend]

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.
 
Semaphoreoperator= (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...
 

Detailed Description

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)

Since
This struct is available since SDL 3.2.0.
Category:
Resource

Constructor & Destructor Documentation

◆ Semaphore() [1/2]

constexpr SDL::Semaphore::Semaphore ( const SemaphoreRaw  resource)
inlineexplicitconstexpr
Parameters
resourcea SemaphoreRaw to be wrapped.

This assumes the ownership, call release() if you need to take back.

◆ Semaphore() [2/2]

SDL::Semaphore::Semaphore ( Uint32  initial_value)
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.

Parameters
initial_valuethe starting value of the semaphore.
Postcondition
a new semaphore or nullptr on failure; call GetError() for more information.
Since
This function is available since SDL 3.2.0.
See also
Semaphore.Destroy
Semaphore.Signal
Semaphore.TryWait
Semaphore.GetValue
Semaphore.Wait
Semaphore.WaitTimeout

The documentation for this class was generated from the following file: