Objetivos e enquadramento

  • compreender os princípios fundamentais de concorrência e as principais problemáticas relacionadas com a concorrência e com a execução concorrente de programas.
  • conhecer as especificidades das arquiteturas de memória partilhada que são relevantes para o desempenho de uma aplicação concorrente, como o fluxo de dados e o processamento das instruções, o funcionamento da memória, e a sincronização e coerência dos dados em memória.
  • conhecer os princípios teóricos que fundamentam um bom e correto desenho de uma aplicação concorrente, com particular ênfase nos conceitos e aspetos formais da sincronização.
  • estar familiarizado com as principais primitivas de sincronização existentes para o desenvolvimento de aplicações concorrentes e ser capaz de modelar e implementar estruturas de dados, ferramentas e/ou aplicações concorrentes correta e eficientemente, usando primitivas/bibliotecas duma linguagem de programação atual para programação em memória partilhada utilizando processos e/ou threads.


Programa e conteúdos


O programa da parte I da unidade curricular inclui os seguintes tópicos:

  • Conceitos básicos de programação concorrente
  • Noções básicas de Concorrência
  • Sistemas de transições
  • CCS: Calculus of Communicating Systems:
    • sequência, composição, sincronização;
    • restrição e reetiquetagem;
    • parâmetros e dados
  • Comportamento observável
    • relações de equivalência, congruência, bisimulações; congruência observável
    • propriedades
  • pseuCo: linguagem de programação para agentes concorrentes
    • pseuCo e CCS
    • cooperação por passagem de mensagens (canais síncronos e assíncronos)
    • cooperação por partilha de memória (Mutex, locks e monitors)
    • Parte II