Reference

ACE_SV_Semaphore_Simple(3)

This is a simple semaphore package that assumes there are no race conditions for initialization (i.e., the order of process startup must be well defined).

NAME

ACE_SV_Semaphore_Simple - This is a simple semaphore package that assumes there are no race conditions for initialization (i.e., the order of process startup must be well defined).

SYNOPSIS

#include <ace/SV_Semaphore_Simple.h>
class ACE_SV_Semaphore_Simple
{
  public:
    enum{ ACE_CREATE = IPC_CREAT, ACE_EXCL = IPC_EXCL, ACE_OPEN = 0 };
    ACE_SV_Semaphore_Simple (void);
    ACE_SV_Semaphore_Simple (
        key_t key,
        int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
        int initial_value = 1,
        u_short nsems = 1,
        int perms = ACE_DEFAULT_FILE_PERMS
        );
    ACE_SV_Semaphore_Simple (
        const char *name,
        int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
        int initial_value = 1,
        u_short nsems = 1,
        int perms = ACE_DEFAULT_FILE_PERMS
        );
    ~ACE_SV_Semaphore_Simple (void);
    int open (
        const char *name,
        int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
        int initial_value = 1,
        u_short nsems = 1,
        int perms = ACE_DEFAULT_FILE_PERMS
        );
    int open (
        key_t key,
        int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
        int initial_value = 1,
        u_short nsems = 1,
        int perms = ACE_DEFAULT_FILE_PERMS
        );
    int close (void);
    int remove (void) const;
    int acquire (u_short n = 0, int flags = 0) const;
    int acquire_read (u_short n = 0, int flags = 0) const;
    int acquire_write (u_short n = 0, int flags = 0) const;
    int tryacquire (u_short n = 0, int flags = 0) const;
    int tryacquire_read (u_short n = 0, int flags = 0) const;
    int tryacquire_write (u_short n = 0, int flags = 0) const;
    int release (u_short n = 0, int flags = 0) const;
    int op (int val, u_short semnum = 0, int flags = SEM_UNDO) const;
    int op (sembuf op_vec[], u_short nsems) const;
    int control (int cmd, semun arg, u_short n = 0) const;
    int control (int cmd, int value = 0, u_short n = 0) const;
    int get_id (void) const;
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  protected:
    key_t key_;
    int internal_id_;
    int sem_number_;
    int init (
        key_t k = ACE_static_cast (key_t,
        ACE_INVALID_SEM_KEY),
        int i = -1
        );
    key_t name_2_key (const char *name);
};

Initialization and termination methods.

ACE_SV_Semaphore_Simple (void);

ACE_SV_Semaphore_Simple (
    key_t key,
    int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
    int initial_value = 1,
    u_short nsems = 1,
    int perms = ACE_DEFAULT_FILE_PERMS
    );

ACE_SV_Semaphore_Simple (
    const char *name,
    int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
    int initial_value = 1,
    u_short nsems = 1,
    int perms = ACE_DEFAULT_FILE_PERMS
    );

~ACE_SV_Semaphore_Simple (void);

int open (
    const char *name,
    int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
    int initial_value = 1,
    u_short nsems = 1,
    int perms = ACE_DEFAULT_FILE_PERMS
    );

int open (
    key_t key,
    int flags = ACE_SV_Semaphore_Simple::ACE_CREATE,
    int initial_value = 1,
    u_short nsems = 1,
    int perms = ACE_DEFAULT_FILE_PERMS
    );

Open or create one or more SV_Semaphores. We return 0 if all is OK, else -1.

int close (void);

Close a ACE_SV_Semaphore, marking it as invalid for subsequent operations...

int remove (void) const;

Remove all SV_Semaphores associated with a particular key. This call is intended to be called from a server, for example, when it is being shut down, as we do an IPC_RMID on the ACE_SV_Semaphore, regardless of whether other processes may be using it or not. Most other processes should use close below.

Semaphore acquire and release methods.

int acquire (u_short n = 0, int flags = 0) const;

Wait until a ACE_SV_Semaphore's value is greater than 0, the decrement it by 1 and return. Dijkstra's P operation, Tannenbaums DOWN operation.

int acquire_read (u_short n = 0, int flags = 0) const;

Acquire a semaphore for reading.

int acquire_write (u_short n = 0, int flags = 0) const;

Acquire a semaphore for writing

int tryacquire (u_short n = 0, int flags = 0) const;

Non-blocking version of acquire.

int tryacquire_read (u_short n = 0, int flags = 0) const;

Try to acquire the semaphore for reading.

int tryacquire_write (u_short n = 0, int flags = 0) const;

Try to acquire the semaphore for writing.

int release (u_short n = 0, int flags = 0) const;

Increment ACE_SV_Semaphore by one. Dijkstra's V operation, Tannenbaums UP operation.

Semaphore operation methods.

int op (int val, u_short semnum = 0, int flags = SEM_UNDO) const;

General ACE_SV_Semaphore operation. Increment or decrement by a specific amount (positive or negative; amount can`t be zero).

int op (sembuf op_vec[], u_short nsems) const;

General ACE_SV_Semaphore operation on an array of SV_Semaphores.

Semaphore control methods.

int control (int cmd, semun arg, u_short n = 0) const;

int control (int cmd, int value = 0, u_short n = 0) const;

int get_id (void) const;

Get underlying internal id.

void dump (void) const;

Dump the state of an object.

ACE_ALLOC_HOOK_DECLARE;

Declare the dynamic allocation hooks.

AUTHOR

Doug Schmidt

LIBRARY

ace