42 Exam 06 <TRUSTED>
The prompt usually reads something like: Write a program that takes a number_of_philosophers and a time_to_die as arguments. Each philosopher is a process. They must eat, sleep, and think. If a philosopher doesn’t start eating before time_to_die milliseconds after their last meal, they die and the simulation stops. | Feature | Exam 03 (Minishell) | Exam 04 (Microshell) | Exam 06 (Philosophers) | | :--- | :--- | :--- | :--- | | Focus | Parsing & Execution | Pipes & File Descriptors | fork() , waitpid() , kill() | | Concurrency | Sequential processes | Pipelines | Simulated parallel processes | | IPC | execve , dup2 | Pipes | Signals ( SIGUSR1 , SIGUSR2 ) | | Difficulty Spike | Moderate | High | Extreme |
sem_t *forks; forks = sem_open("/forks", O_CREAT, 0644, number_of_philosophers); // ... later sem_wait(forks); // eat sem_post(forks); // finally sem_close(forks); sem_unlink("/forks"); The Moulinette resets /dev/shm/ . Use unique names like /sem_philo_<pid> to avoid conflicts. Step 3: Simulate Death with alarm() and sigaction A common pattern in Exam 06 is to set a SIGALRM in each child. If time_to_die passes without resetting the alarm, the child kills itself. This is cleaner than having the parent poll every millisecond.
If you are a student in the 42 Network (42 Wolfsburg, 42 Paris, 42 Berlin, 42 Silicon Valley, etc.), you know the drill. The curriculum is project-based, peer-to-peer, and notoriously unforgiving. Among the numerous milestones, one particular trial generates more anxiety than most: 42 Exam 06 . 42 Exam 06
if (sig == SIGALRM) printf("%lld %d died\n", get_time(), philos_id); exit(1);
This article will dissect everything you need to know about 42 Exam 06: what it covers, why it is different from the previous exams, how to prepare, and the strategies to execute on exam day. In the 42 curriculum, there are usually 6 core written exams (Exam 00 through Exam 06), though numbering varies slightly by campus. 42 Exam 06 is the final C exam. Unlike Exam 02 (pointers and memory) or Exam 03 (mini-shells), Exam 06 focuses almost exclusively on Concurrency . The prompt usually reads something like: Write a
void death_handler(int sig)
If you can master fork() , sem_wait() , and kill() , you will walk out of 42 Exam 06 not just with a passing grade, but with a true understanding of how operating systems manage processes. And that is the real goal of 42. If a philosopher doesn’t start eating before time_to_die
struct timeval tv; gettimeofday(&tv, NULL); return ((tv.tv_sec * 1000) + (tv.tv_usec / 1000));