Buscar

AVA2 - SISTEMAS OPERACIONAIS UVA

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Algoritmo “concorrentes” 
 
Var 
 // Variaveis de controle das threads 
 thread thread_A, thread_B, thread_C: thread; 
 // Semaforos de controle 
 sema_impressora, sema_plotter, sema_scanner: semaforo; 
 
Procedimento Proc_A() 
Início 
 Enquanto (verdadeiro) Faça // Procedimento nunca termina 
 processa_algo(); 
 aloca_plotter(); 
 processa_algo(); 
 libera_plotter(); 
 Fim Enquanto; 
Fim; 
 
Procedimento Proc_B() 
Início 
 Enquanto (verdadeiro) Faça // Procedimento nunca termina 
 processa_algo(); 
 aloca_scanner(); 
 processa_algo(); 
 aloca_impressora(); 
 processa_algo(); 
 aloca_plotter(); 
 processa_algo(); 
 libera_plotter(); 
 libera_impressora(); 
 libera_scanner(); 
 Fim Enquanto; 
Fim; 
 
Procedimento Proc_C() 
Início 
 Enquanto (verdadeiro) Faça // Procedimento nunca termina 
 processa_algo(); 
 aloca_impressora(); 
 processa_algo(); 
 aloca_scanner(); 
 processa_algo(); 
 libera_impressora(); 
 libera_scanner(); 
 Fim Enquanto; 
Fim; 
 
Início 
 sema_impressora = 1; // Inicia semaforo de controle da impressora 
 sema_plotter = 1; // Inicia semaforo de controle do plotter 
 sema_scanner = 1; // Inicia semaforo de controle do scanner 
 // Inicia as threads colocando-as em execução paralelamente 
 pthread_create(thread_A, Proc_A); // Inicia Proc_A como uma thread 
 pthread_create(thread_B, Proc_B); // Inicia Proc_A como uma thread 
 pthread_create(thread_C, Proc_C); // Inicia Proc_A como uma thread 
 // faz com que a thread principal espere as demais acabarem 
 pthread_join(thread_A); 
 pthread_join(thread_B); 
 pthread_join(thread_C); 
Fim. 
 
RESPOSTAS 
 
Identificação das linhas do sistema que podem causar problemas durante a execução: 
Resposta: 
Procedimento Proc_B 
 libera_plotter(); 
 libera_impressora(); 
 libera_scanner(); 
 
Explicação dos problemas que podem ocorrer: 
Resposta: 
A liberação de processos fora da ordem de execução certa ocasiona bloqueio de um dos 
processos em execução, o que ocasiona impasses 
 
Proposta de correção: 
Resposta: 
Procedimento Proc_B() 
Início 
 Enquanto (verdadeiro) Faça // Procedimento nunca termina 
 processa_algo(); 
 aloca_scanner(); 
 processa_algo(); 
 aloca_impressora(); 
 processa_algo(); 
 aloca_plotter(); 
 processa_algo(); 
 libera_scanner(); 
 libera_impressora(); 
 libera_plotter(); 
 Fim Enquanto; 
Fim;

Continue navegando