MAC 438 - Programação Concorrente

Primeiro Semestre de 2006

Prof. Francisco Reverbel

. Informações gerais
. Ementa da disciplina
. Assuntos tratados em aula
. Exercícios-programa
        
. Bibliografia
. Lista de discussão da disciplina
. Recursos adicionais na Internet

At work icon Esta página estará em permanente construção até o final do semestre...

Informações Gerais

. Local: IME-USP, bloco B, sala 6
. Horário: terças das 10:00 às 11:40, sextas das 8:00 às 9:40
. Monitor: Alex Abate Biral (zaratrus arroba ime ponto usp ponto br)
. Horário e local de monitoria: terças e sextas das 13:00 às 14:00, na sala de monitores
. Pasta xerox CAMAT: número 31
. Avaliação: duas provas e quatro exercícios-programa
     . Média de provas: MP = (2 * P1 + 3 * P2)/5
     . Prova substitutiva: Está prevista uma terceira prova P3, para alunos que comprovadamente não puderam comparecer à uma das duas provas, P1 ou P2. Quem fizer essa prova terá sua média de provas calculada como
MP = max {(2 * P1 + 3 * P3)/5, (P2 + P3)/2}
     . Média de exercícios-programa: MEP = (EP1 + EP2 + EP3 + EP4)/4
     . Média final: se MP >=5 e ME >= 5
então MF = (2 * MP + ME)/3
senão MF = min {MP, ME}
     . Datas das provas: 09 de maio, 30 de junho e 04 de julho (substitutiva)
. Recuperação: Os alunos que ficarem com média final maior ou igual a 3 e menor que 5 terão direito de fazer recuperação desta disciplina.
     . Se sua média de provas MP foi menor que 5, então você deverá fazer a prova de recuperação no dia 01 de agosto, às 16:00, na sala 9 do bloco B.
     . Se sua média de exercícios-programa ME foi menor que 5, então você deverá entregar o exercício-programa de recuperação até as 10:00 do dia 31 de julho.
     . Média de recuperação: se você só precisou fazer a prova, MR = nota da prova
se você só precisou fazer o exercício, MR = nota do exercício
se você precisou fazer ambos:
         se prova >= 5 e exercício >= 5
                 então MR = (2 * prova + exercício)/3
                 senão MR = min {prova, exercício}
     . Nota final: (MF + 2 MR)/3, onde MF é a média final do semestre e MR é a média da recuperação

Assuntos Tratados em Aula

. 21/02: Informações gerais, bibliografia, critério de aprovação, etc. Capítulo 1 do Andrews, até 1.2.
. 07/03: Capítulo 1 do Andrews, de 1.3 a 1.7.
. 10/03: Andrews, seções 1.8, 1.9, 2.1 e 2.2. (Não vimos o último programa da seção 2.2.)
. 14/03: Andrews, seções 2.2 (o último programa, não visto na aula anterior), 2.3 e 2.4.
. 17/03: Andrews, seções 2.4 (continuação), 2.5 e 2.8 (exceto 2.8.1).
(No meu livro a seção 2.5 é intitulada "Producer/Consumer Synchronization", diferentemente do que aparece no índice disponibilizado pelo Andrews.)
. 21/03: Capítulo 3 do Andrews, até 3.3.1 (não chegamos a ver o algoritmo tie breaker para n processos).
. 24/03: Andrews, seções 3.3.1 (a generalização do algoritmo tie breaker para n processos), 3.3.2 e 3.3.3.
. 28/03: Andrews, seção 3.4, até 3.4.3 (apenas começamos a parte sobre butterfly barrier e barreira de disseminação, em 3.4.3).
. 31/03: Andrews, seção 3.4.3 (butterfly barrier e barreira de disseminação) e capítulo 4, até 4.2.4.
. 04/04: Sinais e memória compartilhada no Unix/Linux. Andrews, de 4.3 a 4.4.1.
. 07/04: Andrews, de 4.4.2 a 4.4.4.
. 18/04: Andrews, seção 4.5 e exercício 4.30 parte (a). Fazer em casa as partes (b) e (c) do exercício 4.30.
. 25/04: Resolução de exercícios do Andrews: 4.30(b), 4.30(c) sem controle do escalonamento dos processos individuais e 4.30(c) com semáforos privados e controle do escalonamento dos processos individuais.
. 28/04: Resolução de exercícios do Andrews: 4.31(a) (o problema da ponte de mão única) e 4.37 (o problema da monhanha russa). Comentários/dicas sobre os problemas 4.27 (o problema dos fumantes), 4.28 (operações P e V em múltiplos semáforos) e 4.38 (eventcounter e sequencer).
. 05/05: Capítulo 5 do Andrews, até 5.2.2.
. 09/05: Primeira prova.
. 12/05: Andrews, seções 5.2.3, 5.2.4 e 5.2.5.
. 16/05: Threads, sincronização e monitores em Java (Andrews, seção 5.5). Uso de synchronized (Bloch, ítem 48).
. 19/05: O "double-checked idiom" não funciona em Java (Bloch, ítem 48). Problemas com sincronização excessiva (Bloch, ítem 49). Nunca chamar wait fora de um laço (Bloch, ítem 50).
. 30/05: Bloch, ítens 51 (não depender do escalonador de threads), 52 (documentar thread safety) e 53 (evitar thread groups). Cancelamento ("interrupção") de threads e a InterruptedException (Lea, seção 3.1.2). Implementação de semáforos (Lea, seção 3.7.1). O problema do aninhamento de monitores (Lea, seção 3.3.4).
. 02/06: Bounded buffer com notifyAll (Lea, seção 3.3.1). Delegação de ações e bounded buffer sem notifyAll (Lea, seção 3.7.2.).
. 06/06: O notifyAll é mesmo necessário na primeira implementação de bounded buffer vista na aula passada? (Esclarecimento sobre essa questão.) A biblioteca de concorrência do JDK 1.5.
. 09/06: A biblioteca de concorrência do JDK 1.5 (continuação). Transparências do JavaOne 2006. Revisão de bancos de dados para o EP4: o protocolo two-phase locking (2PL).
. 20/06: Leitura recomendada: Andrews, de 6.1 a 6.4. Implementação de monitores usando semáforos (Andrews, seção 6.5). Resolução dos exercícios 5.1 e 5.4 do Andrews. Resolução do problema do banheiro unisex usando um monitor.
. 30/06: Segunda prova.
. 04/07: Terceira prova (substitutiva).

Exercícios-Programa

. Primeiro exercício-programa (ps, pdf, solução incompleta). Prazo: até 18 de abril.
. Segundo exercício-programa (ps, pdf). Prazo: até 10 15 de maio.
. Terceiro exercício-programa (ps, pdf). Prazo: até 06 de junho.
. Quarto exercício-programa (ps, pdf, exemplo de programa com uma thread por conexão TCP). Prazo: até 27 de junho.

Bibliografia

. Gregory R. Andrews, Foundations of Multithreaded, Parallel, and Distributed Programming, Addison-Wesley, 1999. ISBN: 0-2013-5752-6. (Ver também as erratas da primeira edição e das edições seguintes.)
. Doug Lea, Concurrent Programming in Java, Second Edition: Design Principles and Patterns (The Java Series), Addison-Wesley, 1999. ISBN: 0-201-31009-0.
. M. Ben-Ari, Principles of Concurrent Programming, Prentice-Hall International, 1982. ISBN: 0-13-701078-8.
. Joshua Bloch, Effective Java Programming Language Guide (The Java Series), Addison-Wesley, 2001. ISBN: 0-201-31005-8.

Recursos Adicionais na Internet

. Material de apoio disponibilizado pelo autor do livro Foundations of Multithreaded, Parallel, and Distributed Programming.
. Suplemento on-line do livro Concurrent Programming in Java.
. Concurrent Utilities do JDK 1.5.0.
. util.concurrent, pacote Java disponibilizado por Doug Lea.


Valid CSS! Valid XHTML 1.0! Last modified: Mon Jul 17 12:01:20 EST 2006
Francisco Reverbel
reverbel at ime.usp.br