Notes
This module defines counting semaphores.
Include
ao_async.h |
ao_list.h |
ao_time.h |
ao_uint.h |
stdbool.h |
Types
ao_sem_t
typedef struct ao_sem_t ao_sem_t;
Represents a counting semaphore.
ao_sem_take_t
typedef struct ao_sem_take_t ao_sem_take_t;
Represents the taking of a counting semaphore.
Structs
ao_sem_t
struct ao_sem_t
{
ao_uint_t count;
ao_list_t take;
};
count |
The count. |
take |
The list of takings. |
ao_sem_take_t
struct ao_sem_take_t
{
ao_async_t async;
ao_uint_t count;
bool volatile result;
ao_sem_t * sem;
ao_list_node_t sem_take_node;
};
async |
The asynchronous event. |
count |
The count to take. |
result |
The result. |
sem |
The counting semaphore. |
sem_take_node |
The node for the counting semaphore’s list of takings. |
Functions
ao_sem_give
void ao_sem_give(ao_sem_t * s, ao_uint_t count);
Gives a counting semaphore.
ao_sem_take
ao_sem_take_from
bool ao_sem_take (ao_sem_t * s, ao_uint_t count, ao_time_t timeout);
bool ao_sem_take_from(ao_sem_t * s, ao_uint_t count, ao_time_t timeout, ao_time_t beginning);
Takes a counting semaphore in a blocking fashion with a timeout and an optional beginning.
ao_sem_take_forever
bool ao_sem_take_forever(ao_sem_t * s, ao_uint_t count);
Takes a counting semaphore indefinitely in a blocking fashion.
ao_sem_take_try
bool ao_sem_take_try(ao_sem_t * s, ao_uint_t count);
Takes a counting semaphore in a non-blocking fashion.
ao_sem_take_begin
ao_sem_take_end
void ao_sem_take_begin(ao_sem_take_t * t);
void ao_sem_take_end (ao_sem_take_t * t);
Begins or ends, respectively, a taking of a counting semaphore.