Célula flexível de manufatura

Semáforos POSIX

O padrão POSIX 1003.1B define várias operações envolvendo semáforos, dentre as quais as mais significativas são (para mais informações vide as páginas de manual UNIX):

#include <semaphore.h>
 
sem_t sem ;
 
// inicializa o semáforo com o valor init_value
int sem_init (sem_t *sem, int is_shared, unsigned int init_value);
 
// P(sem) ou down(sem)
int sem_wait (sem_t *sem);
 
// V(sem) ou up(sem)
int sem_post (sem_t *sem);
 
// destroi o semáforo, liberando as tarefas bloqueadas
int sem_destroy (sem_t *sem);

Usando semáforos e threads POSIX, deve ser construído um programa em C para simular uma célula flexível de manufatura. A célula é composta por tornos automáticos, robôs industriais que continuamente carregam/descarregam os tornos e buffers para a entrada e saída de peças, conforme indicado na figura abaixo.

Célula Flexível de Manufatura

Existem vários aspectos de sincronização a considerar:

Situação 1

Nesta situação, há um torno e um robô.

Situação 2

Nesta situação, há três tornos e dois robôs trabalhando totalmente em paralelo: qualquer robô pode carregar/descarregar qualquer torno. O restante é idêntico à situação anterior.

Avaliação de desempenho

Para medir o desempenho das soluções propostas, sugere-se seguir o seguinte procedimento:

Desta forma, é possível medir o tempo necessário para processar N peças, e por conseqüência, a eficiência da solução implementada. Por exemplo, considerando 20 peças, 1s para cada operação de carga/descarga e 5s para cada usinagem de peça, podem ser calculados os seguintes tempos mínimos teóricos:

A entregar