63 lines
3.1 KiB
Markdown
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.
|