Este curso trata da criação de programas com múltiplas threads (multithread, multitarefa). As threads podem executar em paralelismo real, no caso de processadores multicore, ou pseudo-paralelismo através do escalonamento provido pelo sistema operacional. As threads trocam dados através de variáveis compartilhadas e usam mecanismos de sincronização para coordenar suas execuções.
Embora os conceitos apresentados no curso sejam válidos para diferentes linguagens de programação e sistemas operacionais, vamos utilizar especificamente a linguagem de programação C e a biblioteca Pthreads disponível no Linux para os exemplos.
Ao longo de todo o curso a ênfase está na programação. As abstrações e primitivas presentes nas Pthreads são descritas através de códigos exemplo funcionais, ou seja, que compilam e executam. As aulas são apresentadas a partir de código exemplo completo, o qual fica disponível para download como um recurso do curso.
O padrão POSIX Threads (Pthreads) foi criado pela IEEE para padronizar a utilização de threads em diversos sistemas. Atualmente existem implementações da API Pthreads para várias linguagens e sistemas operacionais. Ele é muito utilizado, em particular, no desenvolvimento de aplicações do tipo "embedded system" e "Internet das Coisas".
No curso são apresentados inicialmente os conceitos que norteiam a programação concorrente em geral e a programação multithread em particular. Em seguida são mostrados os aspectos básicos tais como criar thread, esperar por thread, sincronizar threads, etc. Finalmente, são explorados os recursos mais avançados da API Pthreads, tais como sincronização em barreira e do tipo leitor/escritor. Também serão tratados aspectos fundamentais como deadlocks, exclusão mútua, atomicidade, condições de corrida e outros.
Ao final do curso é desenvolvido um pequeno projeto para ilustrar os diversos conceitos e recursos apresentados ao longo das aulas.
Em termos de ferramentas computacionais, será usado apenas um computador com o sistema operacional Linux, um editor de texto (gedit ou outro qualquer) e o compilador gcc. Também é possível usar um computador Windows com o WSL2 instalado. É claro que alunos acostumados com outros ambientes de programação, tais como as IDE Visual Studio Code ou Eclipse, podem usa-las. Porém elas não fazem parte do escopo do curso.