Skip to content

ijhyn/42-Philosophers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Philosophers

이 프로젝트는 고전적인 동기화 문제인 '식사하는 철학자들 문제(Dining Philosophers Problem)'를 C 언어와 POSIX 스레드(pthread)를 사용하여 시뮬레이션한 것입니다. 여러 철학자들이 한정된 자원(포크)을 공유하며 식사를 하는 상황에서 발생할 수 있는 교착 상태(Deadlock)와 자원 경쟁 문제를 이해하고 해결하는 데 중점을 둡니다.

프로젝트 목표

  • 다중 스레드 환경에서 동기화 문제를 이해하고 해결하는 능력 배양.
  • 뮤텍스(Mutex)를 활용한 자원 보호 및 교착 상태 방지 기법 구현.
  • 효율적인 스레드 관리 및 병렬 프로그래밍 학습.
  • '식사하는 철학자들 문제'의 다양한 시나리오를 시뮬레이션하여 문제 해결 전략 모색.

주요기능

  • 식사하는 철학자들 시뮬레이션: 지정된 수의 철학자들이 생각하고, 식사하고, 잠자는 과정을 시뮬레이션합니다.
  • 포크 자원 관리: 각 철학자가 식사하기 위해 두 개의 포크(뮤텍스)를 획득하고 해제하는 과정을 제어합니다.
  • 교착 상태 방지: 포크 획득 순서나 기타 전략을 통해 교착 상태를 방지합니다. (e.g., 비대칭 포크 획득)
  • 시간 기반 상태 변화: 철학자들의 행동(식사, 수면, 생각)에 시간을 부여하고, 특정 시간 내에 식사하지 못하면 사망 처리합니다.
  • 모니터링 스레드: 별도의 스레드가 철학자들의 상태를 주기적으로 확인하여 사망 여부 또는 모든 철학자의 식사 완료 여부를 감지합니다.
  • 인자 기반 설정: 명령줄 인자를 통해 철학자 수, 사망 시간, 식사 시간, 수면 시간, 그리고 각 철학자가 먹어야 하는 식사 횟수를 설정할 수 있습니다.

Getting Started

시스템 요구사항

  • gcc 또는 clang과 같은 C 컴파일러
  • make 유틸리티
  • POSIX 스레드(pthread) 라이브러리가 설치된 Unix-like 운영 체제 (Linux, macOS 등)

설치 및 실행

  1. 리포지토리 클론 (필요한 경우):

    git clone [리포지토리_URL]
    cd philo
  2. 빌드: 프로젝트 루트 디렉토리에서 다음 명령어를 실행하여 바이너리를 빌드합니다.

    make
  3. 실행: 생성된 philo 실행 파일을 다음 형식으로 실행합니다.

    ./philo <number_of_philosophers> <time_to_die> <time_to_eat> <time_to_sleep> [number_of_times_each_philosopher_must_eat]

    예시: 철학자 5명, 800ms 내 사망, 200ms 식사, 200ms 수면, 각 철학자 5회 식사

    ./philo 5 800 200 200 5

    철학자 4명, 410ms 내 사망, 200ms 식사, 200ms 수면 (식사 횟수 제한 없음)

    ./philo 4 410 200 200
    ```% 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors