class Poco::Semaphore

Overview

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. More…

#include <Semaphore.h>

class Semaphore: private Poco::SemaphoreImpl
{
public:
    // construction

    Semaphore(int n);

    Semaphore(
        int n,
        int max
        );

    // methods

    void
    set();

    void
    wait();

    void
    wait(long milliseconds);

    bool
    tryWait(long milliseconds);
};

Inherited Members

protected:
    // methods

    void
    setImpl();

    void
    waitImpl();

    bool
    waitImpl(long milliseconds);

Detailed Documentation

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.

Construction

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.

Methods

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.

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.

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.

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.