/* * Thread 0 executa cond_wait * Thread 1 executa cond_signal * Thread 2 executa cond_wait e não fica bloqueada * Thread 0 continua esperando... */ #include #include #include #include #include "mutex_lista.h" cond_t cond; mutex_t mutex; void *thread_0(void* v) { mutex_lock(&mutex); printf("Thread 0 vai executar cond_wait.\n"); cond_wait(&cond, &mutex); printf("Thread 0 vai continuar sua execução.\n"); mutex_unlock(&mutex); return NULL; } void *thread_1(void* v) { mutex_lock(&mutex); printf("Thread 1 vai executar cond_signal.\n"); cond_signal(&cond); mutex_unlock(&mutex); return NULL; } void *thread_2(void* v) { mutex_lock(&mutex); printf("Thread 2 vai executar cond_wait.\n"); cond_wait(&cond, &mutex); printf("Thread 2 vai continuar sua execução.\n"); mutex_unlock(&mutex); return NULL; } int main() { pthread_t thr0, thr1, thr2; mutex_init(&mutex, NULL); cond_init(&cond, NULL); pthread_create(&thr0, NULL, thread_0, NULL); pthread_create(&thr1, NULL, thread_1, NULL); pthread_create(&thr2, NULL, thread_2, NULL); pthread_join(thr0, NULL); pthread_join(thr1, NULL); pthread_join(thr2, NULL); mutex_destroy(&mutex); cond_destroy(&cond); return 0; }