Library: Foundation
Package: Threading
Header: Poco/Semaphore.h
Description
A Semaphore is a synchronization object with the following characteristics: A semaphore has a value that is constrained to be a non-negative integer and two atomic operations. The allowable operations are V (here called set()) and P (here called wait()). A V (set()) operation increases the value of the semaphore by one. A P (wait()) operation decreases the value of the semaphore by one, provided that can be done without violating the constraint that the value be non-negative. A P (wait()) operation that is initiated when the value of the semaphore is 0 suspends the calling thread. The calling thread may continue when the value becomes positive again.
Inheritance
Direct Base Classes: SemaphoreImpl
All Base Classes: SemaphoreImpl
Member Summary
Member Functions: set, tryWait, wait
Constructors
Semaphore
Semaphore(
int n
);
Semaphore
Semaphore(
int n,
int max
);
Creates the semaphore. The current value of the semaphore is given in n. The maximum value of the semaphore is given in max. If only n is given, it must be greater than zero. If both n and max are given, max must be greater than zero, n must be greater than or equal to zero and less than or equal to max.
Destructor
~Semaphore
~Semaphore();
Destroys the semaphore.
Member Functions
set
void set();
Increments the semaphore's value by one and thus signals the semaphore. Another thread waiting for the semaphore will be able to continue.
tryWait
bool tryWait(
long milliseconds
);
Waits for the semaphore to become signalled. To become signalled, a semaphore's value must be greater than zero. Returns true if the semaphore became signalled within the specified time interval, false otherwise. Decrements the semaphore's value by one if successful.
wait
void wait();
Waits for the semaphore to become signalled. To become signalled, a semaphore's value must be greater than zero. Decrements the semaphore's value by one.
wait
void wait(
long milliseconds
);
Waits for the semaphore to become signalled. To become signalled, a semaphore's value must be greater than zero. Throws a TimeoutException if the semaphore does not become signalled within the specified time interval. Decrements the semaphore's value by one if successful.