/* * Implementação de mutex locks e variáveis de condição * utilizando semáforos. * cond_wait e cond_broadcast bloqueante... */ #include typedef struct { sem_t sem; } mutex_t; typedef void mutexattr_t; int mutex_init(mutex_t *lock, mutexattr_t* attr); int mutex_destroy(mutex_t *lock); int mutex_lock(mutex_t *lock); int mutex_unlock(mutex_t *lock); /*------------------------------------------------------*/ typedef struct { mutex_t lock, lock_aux; int n_wait; int n_signal; sem_t sem; sem_t sem_bloq; } cond_t; typedef void condattr_t; int cond_init(cond_t *cond, condattr_t* attr); int cond_destroy(cond_t *cond); int cond_wait(cond_t *cond, mutex_t *mutex_externo); int cond_signal(cond_t *cond); int cond_broadcast(cond_t *cond);