![]() |
ezEngine
Release 25.03
|
A semaphore is used to synchronize threads, similar to a mutex (see ezMutex). More...
#include <Semaphore.h>
Public Member Functions | |
ezResult | Create (ezUInt32 uiInitialTokenCount=0, ezStringView sSharedName=ezStringView()) |
Attempts to create a new semaphore with an initial number of available tokens. More... | |
ezResult | Open (ezStringView sSharedName) |
Attempts to open an existing named semaphore. More... | |
void | AcquireToken () |
Waits until a token is available and acquires it. More... | |
void | ReturnToken () |
Returns a single token. If another thread is currently waiting for a token, this will wake it up. More... | |
ezResult | TryAcquireToken () |
Same as AcquireToken() but returns immediately with EZ_FAILURE, if currently not tokens are available. | |
A semaphore is used to synchronize threads, similar to a mutex (see ezMutex).
There are three main differences to a mutex:
Semaphores are quite a bit slower than mutexes (10x or so), so don't use them unless you need the added flexibility.
void ezSemaphore::AcquireToken | ( | ) |
Waits until a token is available and acquires it.
Use TryAcquireToken() to prevent blocking if desired. AcquireToken() and ReturnToken() may be called from different threads.
ezResult ezSemaphore::Create | ( | ezUInt32 | uiInitialTokenCount = 0 , |
ezStringView | sSharedName = ezStringView() |
||
) |
Attempts to create a new semaphore with an initial number of available tokens.
If szSharedName is a non-empty string, a 'named' semaphore is created, which can be opened on other processes as well.
This call can fail, if a semaphore with the same name already exists. Use ezSemaphore::Open() instead.
ezResult ezSemaphore::Open | ( | ezStringView | sSharedName | ) |
Attempts to open an existing named semaphore.
Fails if no such semaphore exists.
void ezSemaphore::ReturnToken | ( | ) |
Returns a single token. If another thread is currently waiting for a token, this will wake it up.
AcquireToken() and ReturnToken() may be called from different threads.