Os Sistemas Operacionais
Por: Érico Gonçalves • 19/11/2021 • Trabalho acadêmico • 506 Palavras (3 Páginas) • 145 Visualizações
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;
//Proc_A() aloca o plotter, processa e depois libera
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;
//Proc_B() enquanto o scanner não "libera"o sistema não conseguirá aloca a impressora e nem mesmo o potter.
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;
//Proc_C() ao alocar a impressora, algo no sistema não consegue alocar o scanner sem ter feito o "libera_impressora", desta forma o sistema não conseguirá alocar o scanner.
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.
O thread A pode ser processado sem problemas, a thread B alocará o scanner, depois de liberar o scanner ela alocará a impressora, feito isto ela irá alocar o plotter, mas o sistema só conseguirá se a thread A já estiver finalizado e não é o caso, com isso o sistema ficará confuso, tentará enfileirar e não funcionará.
...