Slides (com pequenas correções e acréscimo de comentários)
Exemplos:
Obtenha o conjunto de arquivos em aula04.zip
Algoritmos de Dijkstra para exclusão mútua entre N threads
dijkstra.c
: codificação para
visualização do comportamento básico
do algoritmo.
starvation-dijkstra.c
: inclusão de
comandos sleep
para induzir starvation em uma das
threads.
Algoritmo do desempate
desempate.c
: codificação do algoritmo
para visualização do comportamento básico
para duas threads.
camp4.c
: codificação de um campeonato com 4 threads utilizando 4 funções distintas. Nos comentários há a proposta de exercício para reescrita desta abordagem com apenas uma função.
Produtor e Consumidor:
prod-cons-sem-sinc.c
: versão do sem
nenhuma sincronização. Ao alterar o posicionamento
dos comandos sleep
, será possível
perceber que itens podem ser perdidos ou lidos duas vezes.
prod-cons-espera-ocupada.c
: versão do
com barreiras de espera ocupada para buffer cheio e buffer
vazio.
prod-cons-race.c
: versão do que
ilustra condição de corrida (race
condition) devido ao fato de as operações de
incremento/decremento do contador não serem
atômicas.