/* * Implementação com bug de mutex locks e variáveis de condição * utilizando semáforos. */ #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; int n_wait; sem_t sem; } 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);