Analise o seguinte programa escrito em linguagem C, executado em ambiente Linux e utilizando a biblioteca POSIX Threads (pthreads):
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
void* thread1(void* arg){
pthread_mutex_lock(&m1);
printf("Thread 1 bloqueou m1\n");
pthread_mutex_lock(&m2);
printf("Thread 1 bloqueou m2\n");
pthread_mutex_unlock(&m2);
pthread_mutex_unlock(&m1);
return NULL;
}
void* thread2(void* arg){
pthread_mutex_lock(&m2);
printf("Thread 2 bloqueou m2\n");
pthread_mutex_lock(&m1);
printf("Thread 2 bloqueou m1\n");
pthread_mutex_unlock(&m1);
pthread_mutex_unlock(&m2);
return NULL;
}
int main(){
pthread_t t1, t2;
pthread_create(&t1,NULL,thread1,NULL);
pthread_create(&t2,NULL,thread2,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}
Considerando a execução concorrente das threads, assinale a alternativa correta.