Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
so:espera_ocupada [2008/05/26 11:17] – maziero | so:espera_ocupada [2011/09/26 22:32] (atual) – [A entregar] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Coordenação por espera ocupada ====== | ||
+ | Este projeto visa expor os problemas advindos do acesso concorrente de tarefas a estruturas de dados compartilhadas e explorar algumas das soluções possíveis para a coordenação dos acessos, usando mecanismos de espera ocupada. | ||
+ | |||
+ | ===== 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 0: tira 34, põe 81, fila: 47 2 19 66 32 60 9 11 38 81 | ||
+ | thread 1: tira 47, põe 55, fila: 2 19 66 32 60 9 11 38 81 55 | ||
+ | thread 0: tira 2, põe 31, fila: 19 66 32 60 9 11 38 81 55 31 | ||
+ | thread 1: tira 19, põe 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. | ||
+ | |||
+ | Observe que a ordem de ativação das threads depende do mecanismo de sincronização utilizado. Por exemplo, caso não seja usado nenhum algoritmo, a ordem é qualquer; caso seja usado o algoritmo de alternância escrita, a ordem deve ser "t0 t1 t0 t1 ...". | ||
+ | |||
+ | ===== Roteiro ===== | ||
+ | |||
+ | - Implemente o programa sem nenhum mecanismo de sincronização e observe se a fila se comporta corretamente. | ||
+ | - Implemente o algoritmo de coordenação por alternância estrita (uma thread de cada vez) e observe o comportamento da fila. | ||
+ | - Implemente o algoritmo de coordenação de Peterson((O algoritmo de Peterson pode ter problemas de funcionamento em máquinas // | ||
+ | - Proponha e implemente uma forma de medir o número de inserções na fila por segundo. | ||
+ | - Meça o desempenho das três implementações (sem sincronização, | ||
+ | |||
+ | ===== A entregar ===== | ||
+ | |||
+ | - As implementações solicitadas | ||
+ | - Um relatório sucinto (e no [[teaching: |