![]() |
XII Release 0.1.0
|
A semaphore is used to synchronize threads, similar to a mutex (see xiiMutex). More...
#include <Semaphore.h>
Public Member Functions | |
xiiResult | Create (xiiUInt32 uiInitialTokenCount=0, xiiStringView sSharedName=xiiStringView()) |
Attempts to create a new semaphore with an initial number of available tokens. | |
xiiResult | Open (xiiStringView sSharedName) |
Attempts to open an existing named semaphore. | |
void | AcquireToken () |
Waits until a token is available and acquires it. | |
void | ReturnToken () |
Returns a single token. If another thread is currently waiting for a token, this will wake it up. | |
xiiResult | TryAcquireToken (xiiTime timeout=xiiTime::MakeZero()) |
Same as AcquireToken() but returns immediately with XII_FAILURE, if currently not tokens are available. | |
A semaphore is used to synchronize threads, similar to a mutex (see xiiMutex).
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 xiiSemaphore::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.
xiiResult xiiSemaphore::Create | ( | xiiUInt32 | uiInitialTokenCount = 0, |
xiiStringView | sSharedName = xiiStringView() ) |
Attempts to create a new semaphore with an initial number of available tokens.
If sSharedName 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 xiiSemaphore::Open() instead.
xiiResult xiiSemaphore::Open | ( | xiiStringView | sSharedName | ) |
Attempts to open an existing named semaphore.
Fails if no such semaphore exists.
void xiiSemaphore::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.