/* * Implementação de locks recursivos. */ typedef struct { int c; mutex_t mutex1; pthread_t id; } rec_mutex_t; int rec_mutex_init(rec_mutex_t* rec_m) { mutex_init(&rec_m->mutex1); rec_m->c = 0; rec_m->id = 0; return 0; } int rec_mutex_lock(rec_mutex_t* rec_m) { if (rec_m->id == pthread_self()) rec_m->c++; else { mutex_lock(&rec_m->mutex1); rec_m->id = pthread_self(); rec_m->c = 1; } return 0; } int rec_mutex_unlock(rec_mutex_t* rec_m) { if (rec_m->id != pthread_self()) return -1; rec_m->c--; if (rec_m->c == 0) { rec_m->id = 0; mutex_unlock(&rec_m->mutex1); } return 0; } int rec_mutex_destroy(rec_mutex_t* rec_m) { return 0; }