Imagem de fundo

Analise o seguinte programa escrito em linguagem C, executado em ambiente Linux e utili...

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.


A

O uso de pthread_mutex_lock impede automaticamente a ocorrência de deadlock.


B

O programa apresenta erro de compilação devido ao uso simultâneo de dois mutex.


C

O programa executará sempre na mesma ordem, primeiro thread1 e depois thread2.


D

O programa sempre executará corretamente, pois cada thread libera os mutex ao final.


E

O programa pode entrar em deadlock, caso cada thread adquira um mutex diferente e aguarde indefinidamente pelo outro.