Escolar Documentos
Profissional Documentos
Cultura Documentos
E isso ocorre porque nas linhas estão com o comando “enquanto”, todas estão, no caso
apenas uma por vez poderia sem haver conflito durante a operação.
Enquanto umas das operações forem verdadeiras, as outras duas não podem .
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 (falso) 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 (falso) 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.