====== Semáforos POSIX ======
Este projeto visa expor os problemas advindos do acesso concorrente de tarefas a estruturas de dados compartilhadas e compreender a coordenação dos acessos através de semáforos.
===== Problema =====
Você deve criar um programa com duas threads POSIX, que manipulam uma fila de inteiros de forma concorrente. Cada thread retira o primeiro elemento da fila e coloca um novo elemento no fim da fila:
while (1)
{
velho = retira_primeiro_elemento_da_fila()
novo = random() % 100
poe_elemento_no_fim_da_fila (novo)
imprime operação efetuada e estado da fila
}
Como fila, deve ser usada a implementação de fila circular construída anteriormente.
===== Observações =====
* A saída do programa deve seguir o formato abaixo (obviamente com valores aleatórios):
thread 1: tira 34, poe 81, fila: 47 2 19 66 32 60 9 11 38 81
thread 4: tira 47, poe 55, fila: 2 19 66 32 60 9 11 38 81 55
thread 2: tira 2, poe 31, fila: 19 66 32 60 9 11 38 81 55 31
thread 3: tira 19, poe 17, fila: 66 32 60 9 11 38 81 55 31 17
...
* A fila tem capacidade para 10 inteiros, está inicialmente cheia (valores aleatórios) e tem comportamento FIFO.
===== Roteiro =====
- Implemente o programa usando **semáforos POSIX** e observe se a fila se comporta corretamente.
- Proponha e implemente uma forma de medir o número de inserções de inteiros na fila por segundo.
- Meça o desempenho de sua solução, compare com as soluções usando espera ocupada e justifique seus resultados.
===== A entregar =====
- A implementação solicitada (arquivo ''semaforo.c'')
- Um relatório sucinto (e no [[teaching:regras das atividades de laboratorio#relatórios|formato correto]]) descrevendo os resultados observados nas experiências.