philosophers_prep/README.md

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

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:
    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 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.