3.1 KiB
3.1 KiB
Exercícios Preparatórios — Projeto Philosophers
Bem-vindo ao repositório de exercícios práticos desenhados para construir, passo a passo, todos os conceitos necessários para dominar o projeto Philosophers da 42. Aqui vais encontrar desafios progressivos sobre threads, mutexes, deadlocks, sincronização, semáforos, timing, e muito mais em C.
Objetivo
A proposta deste repositório é guiar estudantes pela aprendizagem real de programação concorrente, partindo do absoluto básico até à implementação de sistemas completos e robustos capazes de resolver o clássico problema dos Filósofos, incluindo as regras e desafios da bonus part.
Estrutura dos Exercícios
Cada exercício segue uma estrutura clara e normalizada, incluindo:
- Assignment name
- Expected files
- Allowed functions
- Descrição do problema
- Sugestão/Hint para a resolução
Lista de Exercícios
| Nº | Nome | Conteúdo-chave |
|---|---|---|
| 1 | thread_basics | Threads, pthread_create, pthread_join |
| 2 | mutex_basics | Mutexes, race conditions |
| 3 | precise_timing | gettimeofday, usleep, timing |
| 4 | state_monitor | Monitorização, enums, padrões monitor |
| 5 | producer_consumer | Sincronização, coordination problems |
| 6 | deadlock_demo | Deadlock, prevenção de deadlock |
| 7 | limited_resources | Semáforo manual, acesso limitado |
| 8 | simple_philosophers | Problema dos filósofos simplificado |
| 9 | death_monitor | Monitorização de vida, threads watchdog |
| 10 | philosophers_args | Implementação 'full', argumentos |
| 11 | race_detector | Data races, otimização de locks |
| 12 | philosophers_bonus | Processos, semáforos POSIX, bonus part |
Como usar
- Cada exercício é independente. Recomenda-se seguir pela ordem, para garantir a aprendizagem progressiva.
- Compilar cada exercício:
gcc -Wall -Wextra -Werror -pthread <nome_ficheiro>.c -o <programa> - Executar cada binário seguindo as instruções e exemplos do cabeçalho do exercício.
Requisitos Técnicos
- Compilador C (ex: gcc)
- Ambiente POSIX (Linux ou Mac OS X recomendado)
- Bibliotecas pthreads standard
Recomendações
- Não uses funções externas às permitidas.
- Lê atentamente os hints fornecidos para cada exercício.
- Analisa erros de race condition e deadlocks usando ferramentas como
valgrind --tool=helgrind. - Consulta The Little Book of Semaphores para cimentar conceitos.
Créditos e Referências
- Inspirado no livro open-source The Little Book of Semaphores por Allen B. Downey.
- Estrutura e avaliação baseadas no formato dos projetos 42.
- Problema clássico dos Filósofos por Edsger W. Dijkstra.