TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Os Sistemas Operacionais

Por:   •  19/11/2021  •  Trabalho acadêmico  •  506 Palavras (3 Páginas)  •  152 Visualizações

Página 1 de 3

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á.

...

Baixar como (para membros premium)  txt (3 Kb)   pdf (35.3 Kb)   docx (7.4 Kb)  
Continuar por mais 2 páginas »
Disponível apenas no TrabalhosGratuitos.com