./Ilia Munaev – Software Engineer

Linux, Threads. Dining Philosophers (C language)

Overview

A multithreaded simulation of the classic Dining Philosophers Problem, implemented in C using POSIX threads.
Focuses on correct synchronization, deadlock avoidance, starvation prevention, and precise time management on Linux.

Source Code

» GitHub repository

Documentation

» Full project documentation

Purpose

  • Understand concurrency and synchronization in Linux
  • Practice thread-safe design with shared resources
  • Prevent deadlocks and starvation in real scheduling conditions
  • Build intuition for timing, scheduling, and race conditions

Technical Highlights

  • One pthread per philosopher with shared fork resources
  • Mutex-based synchronization for forks and shared state
  • Deadlock prevention via asymmetric fork acquisition strategy
  • Starvation detection using a dedicated monitor thread
  • Precise timing using gettimeofday() and controlled sleep loops
  • Buffered logging system to reduce I/O contention

Architecture

  • Central environment structure managing shared state
  • Philosopher threads executing a finite-state routine
  • Monitor thread supervising starvation and termination
  • Logger thread batching and flushing output safely
  • All mutexes and philosopher structures allocated contiguously

Performance Considerations

  • Reduced system call overhead by avoiding frequent usleep()
  • Buffered logging instead of frequent printf() calls
  • Bitwise operations for low-cost state checks
  • Deterministic fork pickup order to avoid circular waits

Correctness and Safety

  • No deadlocks under tested configurations
  • No starvation when meal limits are specified
  • Thread safety verified with:
    • ThreadSanitizer
    • Valgrind
    • Helgrind / DRD

Outcome

  • Correct, stable multithreaded simulation under load
  • Practical experience with race conditions and scheduling
  • Strong foundation for concurrent programming and low-level debugging
  • Direct relevance to systems programming and security-sensitive code