Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Var 2 3 // Variaveis de controle das threads 4 5 thread thread_A, thread_B, thread_C: thread; 6 7 // Semaforos de controle 8 9 sema_impressora, sema_plotter, sema_scanner: semaforo; 10 11 12 13 Procedimento Proc_A() 14 15 Início 16 17 Enquanto (verdadeiro) Faça // Procedimento nunca termina 18 19 processa_algo(); 20 21 aloca_plotter(); 22 23 processa_algo(); 24 25 libera_plotter(); 26 27 Fim Enquanto; 28 29 Fim; 30 31 32 33 Procedimento Proc_B() 34 35 Início 36 37 Enquanto (verdadeiro) Faça // Procedimento nunca termina 38 39 processa_algo(); 40 41 aloca_scanner(); 42 43 processa_algo(); 44 45 aloca_impressora(); 46 47 processa_algo(); 48 49 aloca_plotter(); 50 51 processa_algo(); 52 53 libera_plotter(); 54 55 libera_impressora(); 56 57 libera_scanner(); 58 59 Fim Enquanto; 60 61 Fim; 62 63 64 65 Procedimento Proc_C() 66 67 Início 68 69 Enquanto (verdadeiro) Faça // Procedimento nunca termina 70 71 processa_algo(); 72 73 aloca_impressora(); 74 75 processa_algo(); 76 77 aloca_scanner(); 78 79 processa_algo(); 80 81 libera_impressora(); 82 83 libera_scanner(); 84 85 Fim Enquanto; 86 87 Fim; 88 89 90 91 Início 92 93 sema_impressora = 1; // Inicia semaforo de controle da impressora 94 95 sema_plotter = 1; // Inicia semaforo de controle do plotter 96 97 sema_scanner = 1; // Inicia semaforo de controle do scanner 98 99 // Inicia as threads colocando-as em execução paralelamente 100 101 pthread_create(thread_A, Proc_A); // Inicia Proc_A como uma thread 102 103 pthread_create(thread_B, Proc_B); // Inicia Proc_A como uma thread 104 105 pthread_create(thread_C, Proc_C); // Inicia Proc_A como uma thread 106 107 // faz com que a thread principal espere as demais acabarem 108 109 pthread_join(thread_A); 110 111 pthread_join(thread_B); 112 113 pthread_join(thread_C); 114 115 Fim. 116 117 118 119 RESPOSTAS: 120 121 A identificação das linhas do sistema que podem causar problemas durante sua execução. 122 123 R: LINHAS 53, 55, 57 124 125 A explicação dos problemas que podem ocorrer. 126 127 R:Liberação dos processos fora de ordem de execução, pode ocasionar a perda de informações ou bloqueio de um dos processos em execução. 128 129 Uma proposta de correção no algoritmo para que os problemas sejam corrigidos e o sistema execute sem erros. 130 131 R: libera_scanner(); 132 libera_impressora(); 133 libera_plotter(); 134 135 136 137
Compartilhar