Condition variables, Name, Synopsis – Comtrol eCos User Manual

Page 71: Description

Advertising
background image

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

Advertising