#include <SV_Semaphore_Complex.h>
Inheritance diagram for ACE_SV_Semaphore_Complex


Public Types | |
| enum | { ACE_CREATE = IPC_CREAT, ACE_OPEN = 0 } |
Public Methods | |
| ACE_SV_Semaphore_Complex (void) | |
| ACE_SV_Semaphore_Complex (key_t key, int create = ACE_SV_Semaphore_Complex::ACE_CREATE, int initial_value = 1, u_short nsems = 1, int perms = ACE_DEFAULT_FILE_PERMS) | |
| ACE_SV_Semaphore_Complex (const char *name, int create = ACE_SV_Semaphore_Complex::ACE_CREATE, int initial_value = 1, u_short nsems = 1, int perms = ACE_DEFAULT_FILE_PERMS) | |
| ~ACE_SV_Semaphore_Complex (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) |
| Open or create an array of SV_Semaphores. We return 0 if all is OK, else -1. | |
| 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 an array of SV_Semaphores. We return 0 if all is OK, else -1. | |
| int | close (void) |
| int | acquire (u_short n = 0, int flags = 0) const |
| Acquire the semaphore. | |
| 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 |
| Try to acquire the semaphore. | |
| 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 |
| Release the semaphore. | |
| int | op (int val, u_short n = 0, int flags = 0) 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 n) const |
| General ACE_SV_Semaphore operation on an array of SV_Semaphores. | |
| int | control (int cmd, semun arg, u_short n = 0) const |
| int | control (int cmd, int value = 0, u_short n = 0) const |
| void | dump (void) const |
| Dump the state of an object. | |
Public Attributes | |
| ACE_ALLOC_HOOK_DECLARE | |
| Declare the dynamic allocation hooks. | |
Static Private Attributes | |
| const int | BIGCOUNT_ = 10000 |
| sembuf | op_lock_ [2] |
| sembuf | op_endcreate_ [2] |
| sembuf | op_open_ [1] |
| sembuf | op_close_ [3] |
| sembuf | op_unlock_ [1] |
This code is a port to C++, inspired by: W. Richard Stevens from his book: UNIX Network Programming (Prentice Hall, ISBN 0-13-949876-1 - 1990). We provide a simpler and easier to understand interface to the System V Semaphore system calls. We create and use a 2 + n-member set for the requested . The first member, [0], is a counter used to know when all processes have finished with the . The counter is initialized to a large number, decremented on every create or open and incremented on every close. This way we can use the "adjust" feature provided by System V so that any process that exit's without calling <close> is accounted for. It doesn't help us if the last process does this (as we have no way of getting control to remove the ) but it will work if any process other than the last does an exit (intentional or unintentional). The second member, [1], of the semaphore is used as a lock variable to avoid any race conditions in the <create> and <close> functions. The members beyond [1] are actual semaphore values in the array of semaphores, which may be sized by the user in the constructor.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Acquire the semaphore.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Acquire a semaphore for reading.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Acquire a semaphore for writing.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Close an ACE_SV_Semaphore. Unlike the <remove> method, this method is for a process to call before it exits, when it is done with the ACE_SV_Semaphore. We "decrement" the counter of processes using the ACE_SV_Semaphore, and if this was the last one, we can remove the ACE_SV_Semaphore. Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Dump the state of an object.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
General ACE_SV_Semaphore operation on an array of SV_Semaphores.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
General ACE_SV_Semaphore operation. Increment or decrement by a specific amount (positive or negative; amount can`t be zero).
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Open or create an array of SV_Semaphores. We return 0 if all is OK, else -1.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Open or create an array of SV_Semaphores. We return 0 if all is OK, else -1.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Release the semaphore.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Try to acquire the semaphore.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Try to acquire the semaphore for reading.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Try to acquire the semaphore for writing.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
Declare the dynamic allocation hooks.
Reimplemented from ACE_SV_Semaphore_Simple. |
|
|
|
|
|
Initializer: {
{0, 0, 0},
{0, 1, SEM_UNDO},
{1, 1, SEM_UNDO},
} |
|
|
Initializer: {
{1, -1, SEM_UNDO},
{0, -1, SEM_UNDO},
} |
|
|
Initializer: {
{0, 0, 0},
{0, 1, SEM_UNDO},
} |
|
|
Initializer: {
{1, -1, SEM_UNDO},
} |
|
|
Initializer: {
{0, -1, SEM_UNDO},
} |
1.2.3 written by Dimitri van Heesch,
© 1997-2000