My Project
|
Semaphore implementation for the synchronization of POSIX threads. More...
Go to the source code of this file.
Typedefs | |
typedef struct SEM | SEM |
Functions | |
SEM * | semCreate (int initVal) |
Creates a new semaphore. More... | |
void | semDestroy (SEM *sem) |
Destroys a semaphore and frees all associated resources. More... | |
void | P (SEM *sem) |
P-operation. More... | |
void | V (SEM *sem) |
V-operation. More... | |
Semaphore implementation for the synchronization of POSIX threads.
This module implements counting P/V semaphores suitable for the synchronization of POSIX threads. POSIX mutexes and condition variables are utilized to implement the semaphor operations.
void P | ( | SEM * | sem | ) |
P-operation.
Attempts to decrement the semaphore value by 1. If the semaphore value is not a positive number, the operation blocks until a V-operation increments the value and the P-operation succeeds.
sem | Handle of the semaphore to decrement. |
SEM* semCreate | ( | int | initVal | ) |
Creates a new semaphore.
This function creates a new semaphore. If an error occurs during the initialization, the implementation frees all resources already allocated by then and sets errno
to an appropriate value.
It is legal to initialize the semaphore with a negative value. If this is the case, in order to reset the semaphore counter to zero, the V-operation must be performed (-initVal) times.
initVal | The initial value of the semaphore. |
NULL
if an error occurred. void semDestroy | ( | SEM * | sem | ) |
Destroys a semaphore and frees all associated resources.
sem | Handle of the semaphore to destroy. If a NULL pointer is passed, the implementation does nothing. |
void V | ( | SEM * | sem | ) |
V-operation.
Increments the semaphore value by 1 and notifies P-operations that are blocked on the semaphore of the change.
sem | Handle of the semaphore to increment. |