반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- CI
- jenkins
- 스프링부트 웹 소켓
- MySQL
- sql
- 프로그래밍언어론
- IOS
- CD
- Xcode
- 인공지능
- 스프링
- 오라클
- swift
- 42seoul
- 티스토리챌린지
- JPA
- 데이터베이스
- 다이어리
- javascript
- 스프링부트
- 소켓
- Spring
- DBMS
- 아이패드다이어리
- 오블완
- 네트워크
- libasm
- springboot
- AI
- 리눅스
Archives
- Today
- Total
Hi yoahn 개발블로그
[42Seoul / subject] Philosophers 해석 본문
반응형
Philosophers
이 프로젝트는, 프로세스 스레딩의 기본을 배우게 된다. 여러분은 스레드를 만드는 방법을 배우고 mutex를 발견할 것이다.
Mandatory part
Basic rules:
- C언어로 작성되어야 하고, Norm 규칙을 따라야 한다. 모든 leak, crash, undefined behavior, or norm error 는 0점 처리된다.
- 여러 철학자들이 둥근 테이블에 앉아 3가지 중 하나를 하고 있다: 먹기, 생각하기, 자기
- 먹는 동안에는 생각하거나 잘 수 없고, 자는 동안에는 먹거나 생각할 수 없고, 생각하는 동안에는 먹거나 잘 수 없다.
- 철학자들이 앉아 있는 원형 테이블에는 중앙에 큰 보울에 스파게티가 담겨있다.
- 탁자 위에 포크가 몇 개 있다.
- 스파게티는 한 개의 포크로 서빙하거나 먹기 어렵기 때문에 철학자는 두 개의 포크로, 한손에 하나씩 들고 먹어야 한다고 가정한다.
- 철학자는 굶주리지 않아야 한다.
- 모든 철학자들은 먹어야 한다.
- 철학자들은 다른 이들과 말할 수 없다.
- 철학자들은 다른 철학자가 언제 죽는지 알지 못한다.
- 철학자가 식사를 마칠 때마다, 그 철학자는 포크를 내려놓고 잠을 자기 시작할 것이다.
- 철학자가 잠자기를 마치면, 그는 생각하기를 시작할 것이다.
- 시뮬레이션은 한 철학자가 죽으면 멈춘다.
- 각 프로그램마다 동일한 옵션이 있어야 한다.
- number_of_philosophers: 철학자의 수와 포크의 수
- time_to_die: (밀리초 단위) 철학자가 마지막 식사를 시작한 후 / 시뮬레이션 시작 후 'time_to_die' 밀리초 안에 먹지 않으면 철학자는 죽는다.
- time_to_eat: 밀리초 단위, 철학자가 식사하는데 걸리는 시간. 그 기간 동안 두개의 포크를 보관해야 할 것이다.
- time_to_sleep: 밀리초 단위, 철학자가 잠자는데 걸리는 시간.
- number_of_times_each_philosopher_must_eat: 이 인자는 선택 사항이며, 이 인자가 존재하면 모든 철학자가 적어도 이 횟수만큼 먹을 경우 시뮬레이션이 중지된다.
이 인자가 없는 경우 시뮬레이션은 철학자가 죽는 경우에만 중지된다.
- 각 철학자에게는 1 부터 'number_of_philosophers'까지의 숫자가 주어져야 한다.
(철학자 번호 부여) - 번호 1 인 철학자 옆에는 번호 'number_of_philosophers' 인 철학자가 있다.
번호가 N인 다른 모든 철학자는 양쪽 철학자의 번호가 N - 1, N + 1 인 철학자가 앉아있다. - 철학자의 상태 변경은 다음과 같이 작성해야 한다. (X가 철학자의 번호, 'time_stamp_in_ms' 는 밀리초 단위의 현재 타임 스탬프)
- timestamp_in_ms X has taken a fork
- timestamp_in_ms X is eating
- timestamp_in_ms X is sleeping
- timestamp_in_ms X is thinking
- timestamp_in_ms X died
- 출력된 상태는 다른 철학자의 상태와 뒤엉켜서는 안된다.
- 철학자가 죽은 다음 철학자의 상태 변경을 출력하는 시간은 10ms 이상이 될 수 없다.
(철학자가 죽고 10ms이내에 죽었다고 출력해야 한다.) - 철학자들은 죽는 것을 피해야 한다.
Program name | philo |
Turn in files | philo/ |
Makefile | Yes |
Arguments | (number_of_philosphers) (time_to_die) (time_to_eat) (time_to_sleep) [number_of_times_each_philosopher_must_eat] |
External functs. | memset, printf, malloc, free, write, usleep, gettimeofday, pthread_create, pthread_detach, pthread_join, pthread_mutex_init, pthread_mutex_destroy, pthread_mutex_lock, pthread_mutex_unlock |
Libft authroized | No |
Description | philosopher with thread and mutex |
In this version the specific rules are:
- 각 철학자들 사이에 하나의 포크, 그러므로 그들이 여러 철학자들일 경우, 각 철학자들의 오른쪽과 왼쪽에 포크가 있을 것이다.
- 철학자가 포크를 복제하지 않도록 하려면 각 포크의 상태를 mutex로 보호해야 한다.
- 각 철학자는 하나의 스레드이다.
반응형
'42 SEOUL' 카테고리의 다른 글
CI/CD 파이프라인 (0) | 2021.08.06 |
---|---|
[42Seoul / Philosophers(OS)] Mutex 와 Semaphore 차이 (0) | 2021.06.28 |
[42Seoul/libasm] libasm 시작하기 (0) | 2021.04.30 |
[42Seoul/libasm] libasm 서브젝트 번역 (0) | 2021.04.30 |
[42Seoul] Cub3D 번역 (0) | 2021.03.31 |
Comments