/* Código construído durante a aula de 31/03/09 */ /* Estrutura de dados para o mutex */ typedef struct { pthread_t id; sem_t sem; } mutex_t; int mutex_init(mutex_t *mutex) { mutex->id = 0; sem_init(mutex->sem, 0, 1); return 0; } int mutex_destroy(mutex_t *mutex) { int r; sem_getvalue(&mutex->sem, &r); sem_destroy(&mutex->sem); if (r == 1) return 0; return -1; } int mutex_lock(mutex_t *mutex) { sem_wait(mutex->sem); mutex->id = pthread_self(); return 0; } int mutex_unlock(mutex_t *mutex) { int r; if (mutex->id != pthread_self()) return -1; sem_getvalue(&mutex->sem, &r); if (r != 0) return -2; sem_post(mutex->sem); return 0; }