Resumo Sistema Cooperativos
Concorrência ocorre quando dois ou mais fluxos de execução correm simultaneamente.
Exemplos são:
Threads, Task, Processos, etc
Execução concorrente:
Cada tarefa é uma unidade de execução autônoma (um thread)
Tarefas podem ser totalmente independentes
Exemplo: execução de um mesmo método sobre dois objetos (da mesma classe)
Tarefas podem necessitar comunicação
Programa não controla a ordem de execução
Fluxos de execução:
Paralelismo verdadeiro
Dois ou mais CPUs
Falso paralelismo (ou paralelismo lógico)
Escalonamento de tarefas
Cooperativo (Co-operatively)
Preemptivo (Pre-emptive)
Timesharing
Paralelismo verdadeiro Falso Paralelismo
Problemas:
Um fluxo de execução pode compartilhar recursos com um outro fluxo de execução.
Os dois fluxos podem acessar e/ou modificar um mesmo recurso ao mesmo tempo.
Ler/Escrever uma mesma variável
Alocar um mesmo dispositivo
Condição de Disputa (Race Condition)
Ocorre quando:
Existe concorrência
Execuções simultâneas
Objetos compartilhados
Quando um ou mais objetos são acessíveis em um ou mais fluxos de execuções
Mudança de estado
Quando pelo menos um dos fluxos de execução é capaz de mudar o estado de um objeto
O problema do produtor / consumidor é conhecido como problema de seção crítica
Recursos compartilhados devem ser protegidos contra acessos simultâneos
Dois ou mais processos não podem estar simultaneamente em uma seção crítica
Nenhum processo fora da seção crítica pode bloquear a execução de um outro processo dentro da seção crítica
Trecho puramente serial!!!!
Condição de disputa
Sincronismo sincronismo de cooperação
Exemplo: mecanismo de espera, no qual uma tarefa aguarda que outra atinja um determinado ponto de execução para estabelecer comunicação. sincronismo de competição
Exemplo: bloqueio de código de acesso a recursos compartilhados (exclusão mútua)
------------ SOLUÇOES -----------
Hardware
Espera ocupada
Desabilita a interrupção na seção crítica
Software
Espera