philosophers_prep/README.md

63 lines
3.1 KiB
Markdown

# 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
1. **Cada exercício é independente.** Recomenda-se seguir pela ordem, para garantir a aprendizagem progressiva.
2. **Compilar cada exercício:**
```sh
gcc -Wall -Wextra -Werror -pthread <nome_ficheiro>.c -o <programa>
```
3. **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](https://greenteapress.com/wp/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.