Poco

class Semaphore

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 inline

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 inline

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 inline

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.