Você está na página 1de 3

Fazendo uma real analogia com as linhas de códigos da programação, entende –se que as

mesmas estão funcionando sem um intertravamento, ou se seja, todas ao mesmo tempo.

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.

Você também pode gostar