Condition variables, Name, Synopsis – Comtrol eCos User Manual
Page 71: Description

Condition Variables
Name
cyg_cond_init, cyg_cond_destroy, cyg_cond_wait, cyg_cond_timed_wait,
cyg_cond_signal, cyg_cond_broadcast
— Synchronization primitive
Synopsis
#include
<
cyg/kernel/kapi.h
>
void cyg_cond_init(cyg_cond_t* cond, cyg_mutex_t* mutex);
void cyg_cond_destroy(cyg_cond_t* cond);
cyg_bool_t cyg_cond_wait(cyg_cond_t* cond);
cyg_bool_t cyg_cond_timed_wait(cyg_cond_t* cond, cyg_tick_count_t abstime);
void cyg_cond_signal(cyg_cond_t* cond);
void cyg_cond_broadcast(cyg_cond_t* cond);
Description
Condition variables are used in conjunction with mutexes to implement long-term waits for some condition to
become true. For example consider a set of functions that control access to a pool of resources:
cyg_mutex_t res_lock;
res_t res_pool[RES_MAX];
int res_count = RES_MAX;
void res_init(void)
{
cyg_mutex_init(&res_lock);
<
fill pool with resources
>
}
res_t res_allocate(void)
{
res_t res;
cyg_mutex_lock(&res_lock);
// lock the mutex
if( res_count == 0 )
// check for free resource
res = RES_NONE;
// return RES_NONE if none
else
{
res_count--;
// allocate a resources
res = res_pool[res_count];
}
71