Please enable JavaScript.
Coggle requires JavaScript to display documents.
Problemas clássicos - Coggle Diagram
Problemas clássicos
Produtores/consumidores
também conhecido como o problema do buffer limitado, consiste em coordenar o acesso de tarefas a um buffer compartilhado com capacidade de armazenamento limitada a N items. O produtor produz e deposita um item no buffer. O consumidor retira um item do buffer e o consome
-
Soluções
Usando semáforos: usando um mutex e dois semáforos podemos resolver esse problema de forma eficiente. Um semáforo diz para o produtor esparar uma vaga no buffer, e outro manda o consumidor espear uma vaga no buffer
Usando variáveis de condição: Além do mutex para acesso exclusivo ao buffer, são necessárias variáveis de condição para indicar a presença de items e de vagas no buffer.
O jantar dos filósofos
um grupo de cinco filósofos chineses alterna suas vidas entre meditar e comer. Ha uma mesa redonda com um lugar fixo para cada filósofo, com um prato, cinco palitos (hashis) compartilhados e um grande prato de arroz ao meio. Para comer, um filósofo fi precisa pegar o palito à sua direita (pi) e à sua esquerda (pi+1), um de cada vez. Como os palitos são compartilhados, dois filósofos vizinhos não podem comer ao mesmo tempo. Os filósofos não conversam entre si nem podem observar os estados uns dos outros
Resolver o problema consiste em emcontrar uma forma de coordenar suas ações de maneira que todos os filósofos consigam meditar e comer.
Uma solução trivial para o problema do jantar dos filósofos consiste em colocar
um “saleiro” hipotético sobre a mesa: quando um filósofo deseja comer, ele deve obter o
saleiro antes de obter os palitos; assim que tiver ambos os palitos, ele devolve o saleiro à
mesa e pode comer
Leitores/escritores
Um conjunto de tarefas acessam de forma concorrente uma área de memória compartilhada, na qual podem fazer leituras ou escritas de valores, havendo, assim, a possibilidade de condições de disputa.
Soluções
Solução simplista: proteger o acesso à área comprtilhada com um mutex ou semáforo inicializado em 1, assim, somente um processo por vez poderia acessar a área, garantindo a integridade de todas as operações.
Solução com priorização de leitores: os leitores dividem a responsabilidade pelo mutex de controle da área compartilhada (marea): o primeiro leitor a entrar obtém esse mutex, que só será liberado pelo último leitor a sair da área. Um contador de leitores permite saber se um leitor é o primeiro
a entrar ou o último a sair. Como esse contador pode sofrer condições de disputa, o acesso a ele é controlado por outro mutex (mcont). Essa solução melhora o desempenho das operações de leitura, pois permite que vários leitores a acessem simultaneamente
O jantar dos selvagens
Variação do problema dos produtores/consumidores. uma tribo de selvagens está jantando ao redor de um grande caldeirão contendo N porções de missionário cozido. Quando um selvagem quer comer, ele se serve de uma porção no caldeirão, a menos que este esteja vazio. Nesse caso, o selvagem primeiro acorda o cozinheiro da tribo e espera que ele encha o caldeirão de volta, para então se servir novamente. Após encher o caldeirão, o cozinheiro volta a dormir.
-
-
-
Um mutex controla o acesso aos caldeirões. E dois semáforos indicam se o caldeirão está vazio ou cheio