Apresentar problemas clássicos de programação concorrente baseada no compartilhamento de variáveis e em troca de mensagens. Ensinar mecanismos de comunicação e sincronização entre processos/objetos concorrentes.
Processos, concorrência, mecanismos de sincronização (conceitos e implementação) e problemas clássicos de programação concorrente.
Conceitos básicos: processos, threads, interrupções, escalonamento. Aspectos de implementação e concorrência. Propriedades de segurança e imparcialidade. Modelos de concorrência. Semântica e implementação de mecanismos de sincronização. Problemas de programação concorrente: deadlock, alocação de recursos, leitura e escrita concorrente, exclusão mútua, consenso. Semântica e implementação de mecanismos de comunicação. Programação concorrente em UNIX. Algoritmos baseados em variáveis compartilhadas: Dijkstra, Peterson, consenso. Algoritmos baseados em envio de mensagens.
Bibliografia Básica: G.R. Andrews, "CONCURRENT PROGRAMMING: PRINCIPLES AND PRACTICE", Benjamin Cummings, 1991. Bibliografia Complementar: W.R. Stevens, "UNIX NETWORK PROGRAMMING", Prentice Hall, 1990.