Philosophers init

Philosophers๊ณผ์ œ ๋ฐฉํ–ฅ์„ฑ

0. ์กฐ๊ฑด, ํ•จ์ˆ˜ ์ •๋ฆฌ.

๊ณผ์ œ ์ •๋ฆฌ

ํ•„์ˆ˜ ํŒŒํŠธ์— ํ•˜๋‚˜, ๋ณด๋„ˆ์Šค ํŒŒํŠธ์— ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์„ธ์š”. ๋‘ ํ”„๋กœ๊ทธ๋žจ์€ ๋ชจ๋‘ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ฃฐ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค:

  • ์ด ํ”„๋กœ์ ํŠธ๋Š” Norm์„ ์ค€์ˆ˜ํ•œ C ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๋ˆ„์ˆ˜, ๋น„์ •์ƒ์ ์ธ ์ข…๋ฃŒ (Crash), ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘, Norm ์—๋Ÿฌ๋Š” 0์ ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ํ•œ ๋ช… ์ด์ƒ์˜ ์ฒ ํ•™์ž๊ฐ€ ๋‘ฅ๊ทผ ํ…Œ์ด๋ธ”์— ์•‰์•„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ํ–‰๋™ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ทจํ•ฉ๋‹ˆ๋‹ค : ๋จน๊ธฐ, ์ƒ๊ฐํ•˜๊ธฐ, ์ž ์ž๊ธฐ
  • ์ฒ ํ•™์ž๊ฐ€ ๋ฐฅ์„ ๋จน๋Š” ๋„์ค‘์—๋Š”, ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜ ์ž ์„ ์ž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž ์ž๋Š” ๋„์ค‘์—๋Š” ๋ฐฅ์„ ๋จน๊ฑฐ๋‚˜ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ƒ๊ฐํ•˜๋Š” ๋„์ค‘์—๋Š” ๋ฐฅ์„ ๋จน๊ฑฐ๋‚˜ ์ž ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž๋“ค์€ ๋‘ฅ๊ทผ ํ…Œ์ด๋ธ”์— ์•‰์•„์žˆ์œผ๋ฉฐ, ๊ฐ€์šด๋ฐ์—๋Š” ์•„์ฃผ ํฐ ์ŠคํŒŒ๊ฒŒํ‹ฐ ๊ทธ๋ฆ‡์ด ๋†“์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ์ž ์œ„์—๋Š” ๋ช‡ ๊ฐœ์˜ ํฌํฌ๊ฐ€ ์˜ฌ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ŠคํŒŒ๊ฒŒํ‹ฐ๋Š” ํฌํฌ ํ•˜๋‚˜๋งŒ์œผ๋ก  ์ง‘๊ฑฐ๋‚˜ ๋จน๊ธฐ๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, ์ฒ ํ•™์ž๋“ค์€ ๋ฐ˜๋“œ์‹œ ์–‘ ์†์— ํฌํฌ๋ฅผ ์ฅ๊ณ  (2๊ฐœ์˜ ํฌํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) ๋จน์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž๋Š” ์ ˆ๋Œ€๋กœ ๊ตถ๊ณ  ์žˆ์œผ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์ฒ ํ•™์ž๋Š” ๋จน์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž๋“ค์€ ์„œ๋กœ์™€ ๋Œ€ํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ฐ ์ฒ ํ•™์ž๋Š” ๋‹ค๋ฅธ ์ฒ ํ•™์ž๊ฐ€ ์–ธ์ œ ์ฃฝ๋Š”์ง€ ์•Œ์•„์ฑŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž๊ฐ€ ๋ฐฅ์„ ๋‹ค ๋จน์—ˆ์œผ๋ฉด, ํฌํฌ๋ฅผ ๋‚ด๋ ค๋†“๊ณ  ์ž ์ž๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž๊ฐ€ ์ž ์„ ๋‹ค ์žค์œผ๋ฉด, ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž๊ฐ€ ํ•œ ๋ช…์ด๋ผ๋„ ์‚ฌ๋งํ•˜๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ™์€ ์˜ต์…˜์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค : ์ฒ ํ•™์ž์˜ ์ˆ˜, ์ฒ ํ•™์ž์˜ ์ˆ˜๋ช…, ๋ฐฅ์„ ๋จน๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„, ์ž ์ž๋Š” ์‹œ๊ฐ„, [๊ฐ ์ฒ ํ•™์ž๊ฐ€ ์ตœ์†Œํ•œ ๋ฐฅ์„ ๋จน์–ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜] (number_of_philosophers time_to_die time_to_eat time_to_sleep [number_of_times_each_philosopher_must_eat])
    • ์ฒ ํ•™์ž์˜ ์ˆ˜ (number_of_philosophers): ํ…Œ์ด๋ธ”์— ์•‰์•„ ์žˆ๋Š” ์ฒ ํ•™์ž์˜ ์ˆ˜์™€ ํฌํฌ์˜ ์ˆ˜
    • ์ฒ ํ•™์ž์˜ ์ˆ˜๋ช… (time_to_die): ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ, ์ฒ ํ•™์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐฅ์„ ๋จน์€ ์ง€ โ€˜time_to_dieโ€™ ์‹œ๊ฐ„๋งŒํผ์ด ์ง€๋‚˜๊ฑฐ๋‚˜, ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ํ›„ โ€˜time_to_dieโ€™ ์‹œ๊ฐ„๋งŒํผ์ด ์ง€๋‚˜๋ฉด ํ•ด๋‹น ์ฒ ํ•™์ž๋Š” ์‚ฌ๋งํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฅ์„ ๋จน๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ (time_to_eat) : ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ, ์ฒ ํ•™์ž๊ฐ€ ๋ฐฅ์„ ๋จน๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์‹œ๊ฐ„๋™์•ˆ, ์ฒ ํ•™์ž๋Š” ๋‘ ๊ฐœ์˜ ํฌํฌ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž ์ž๋Š” ์‹œ๊ฐ„ (time_to_sleep) : ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ, ์ž ์„ ์ž๋Š” ๋ฐ ์†Œ๋ชจ๋˜๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
    • ๊ฐ ์ฒ ํ•™์ž๊ฐ€ ์ตœ์†Œํ•œ ๋ฐฅ์„ ๋จน์–ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ (number_of_times_each_philosopher_must_eat) : ํ•ด๋‹น ์ธ์ž๊ฐ’์€ ์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ โ€˜number_of_times_each_philosopher_must_eatโ€™ ํšŸ์ˆ˜๋งŒํผ ๋ฐฅ์„ ๋จน์—ˆ๋‹ค๋ฉด, ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ’์ด ๋ช…์‹œ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ์ฒ ํ•™์ž๊ฐ€ ํ•œ ๋ช…์ด๋ผ๋„ ์‚ฌ๋งํ•  ๋•Œ๊นŒ์ง€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ์ฒ ํ•™์ž์—๊ฒŒ๋Š” 1๋ถ€ํ„ฐ โ€˜number_of_philosophersโ€™ ๋งŒํผ์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.
    • ์ฒ ํ•™์ž 1๋ฒˆ์€ ์ฒ ํ•™์ž โ€˜number_of_philosophersโ€™๋ฒˆ ์˜†์— ์•‰์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—, N๋ฒˆ ์ฒ ํ•™์ž๋Š” N-1๋ฒˆ ์ฒ ํ•™์ž์™€ N+1๋ฒˆ ์ฒ ํ•™์ž ์‚ฌ์ด์— ์•‰์Šต๋‹ˆ๋‹ค.
  • ์ฒ ํ•™์ž์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (X๋Š” ์ฒ ํ•™์ž์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•˜๋ฉฐ, timestamp_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 ์ด์ƒ์ด ๋˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ฒ ํ•™์ž๋“ค์ด ์ตœ๋Œ€ํ•œ ์ฃฝ์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

์ถœ์ฒ˜ : 42seoul-translation.

์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•จ์ˆ˜๋“ค.

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 ์‚ฌ์šฉ ๋ถˆ๊ฐ€.

1. ๋ญํ•˜๋Š” ๊ณผ์ œ์ผ๊นŒ?

์ฒ ํ•™์ž ๊ฐ๊ฐ์€ ์Šค๋ ˆ๋“œ์ด๊ณ , ์ฒ ํ•™์ž๋Š” ํŠน์ •(์œ„์น˜)์˜ ํฌํฌ(์ž์›) 2๊ฐœ๋ฅผ ์ ์œ ํ•ด์•ผ ์‹์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งŒ์•ฝ ์‹์‚ฌ๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ผ์ •์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ฃฝ๊ณ„๋˜๋ฉฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

๊ต์ฐฉ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ณผ์ œ

2. ๊ณผ์ œ ํŠน์ง•

๋ฌด์กฐ๊ฑด ์ฒ ํ•™์ž๊ฒŒ ์ฃฝ๊ฒŒ๋˜๋Š” ๋˜๋Š” input๊ธฐ์ค€์€ ๋ฌด์—‡์ผ๊นŒ?

3. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ณผ์ œ์˜ ํŠน์ด์‚ฌํ•ญ

์•„๋ž˜์˜ ๋‚ด์šฉ๋“ค์€ ๊ณผ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ๋นก์„ธ๊ณ  ์ด์ƒ์ ์ผ์ง€ ์ƒ๊ฐ์„ ํ•ด๋ณด๋Š” ๋ถ€๋ถ„์ด๋‹ค.

4. ํ†ต์ƒ์ ์ธ ๊ต์ฐฉ์ƒํƒœ ์ฒ˜๋ฆฌ๋ฐฉ์‹๊ณผ ์ ์šฉ๊ณ ์ฐฐ

๊ต์ฐฉ์ƒํƒœ๋Š” ์•„์‚ฌํ˜•์ƒ๊ณผ ๋‹ฌ๋ฆฌ ์ •์ฑ…์˜ ์ž˜๋ชป/์˜ค๋ฅ˜๊ฐ€ ์—†์–ด๋„ ์ž์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค. ๋˜ํ•œ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ด๊ฒฐํ• ์ˆ˜ ์—†๊ณ , ์™„๋ฒฝํ•˜๊ฒŒ ๋ง‰์„์ˆ˜ ์—†๋‹ค.

4.1 ๊ต์ฐฉ ์ƒํƒœ ์˜ˆ๋ฐฉ

๊ต์ฐฉ์ƒํƒœ ํ•„์š”์กฐ๊ฑด์ธ ์ƒํ˜ธ๋ฐฐ์ œ, ๋น„์„ ์ , ์ ์œ /๋Œ€๊ธฐ, ์›ํ˜•๋Œ€๊ธฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฌด๋ ฅํ™”ํ•˜๋Š” ๋ฐฉ์‹.

์ ์œ /๋Œ€๊ธฐ ์˜ˆ๋ฐฉ ๋ฐฉ์‹๊ณผ ์›ํ˜•๋Œ€๊ธฐ ์˜ˆ๋ฐฉ ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์œ ์šฉํ•ด ๋ณด์ธ๋‹ค.

์ผ๋ฐ˜์ ์ธ OS์—์„œ ๊ต์ฐฉ์ƒํƒœ ์˜ˆ๋ฐฉ๊ธฐ๋ฒ•์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์šด์˜ ๋ฐฉ์‹์„ ์ œํ•œ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. -> ๋น„์ •์ƒ์ ์ธ ๋™์ž‘๋ฐฉ์‹.

4.2 ๊ต์ฐฉ ์ƒํƒœ ํšŒํ”ผ

์ž์› ํ• ๋‹น๋Ÿ‰์„ ์กฐ์ ˆํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹. ์˜ˆ๋ฐฉ์€ ๊ต์ฐฉ ๊ตฌ์กฐ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ฒŒ ์ž์› ๋ถ„๋ฐฐ(๋™์ž‘)๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๊ณ , ํšŒํ”ผ๋Š” ์ž์›์˜ ์–‘์„ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ.. ๋ฉ˜๋ฐํ† ๋ฆฌ ๋ถ€๋ถ„์€ ํ• ๋‹น๋˜๋Š” ์ž์› ๋ชจ์ž๋ผ์„œ ์•„๋‹ˆ๋ผ, ํŠน์ • ์ž์›(์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ํฌํฌ)๋งŒ์„ ์š”๊ตฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ž์›์˜ ์ด๋Ÿ‰์„ ์กฐ์ ˆํ•ด์„œ ํ•ด๊ฒฐ๋  ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜์ ์ธ ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๊ธฐ ํž˜๋“ค๊ฒƒ ๊ฐ™๋‹ค. ๋ณด๋„ˆ์Šค ๋ถ€๋ถ„์— ์ ์šฉ ํ•ด์•ผํ• ๋“ฏ ๋ณด์ž„.

4.3 ๊ต์ฐฉ์ƒํƒœ ๊ฒ€์ถœ ๋ฐ ํšŒ๋ณต

๊ต์ฐฉ์ƒํƒœ๋Š” ๋ง‰์„์ˆ˜ ์—†๊ณ , ํšŒํ”ผํ• ์ˆœ ์žˆ์ง€๋งŒ ๊ทธ ๊ณผ์ •์—์„œ๋„ ์ž์›์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฐจ๋ผ๋ฆฌ ๊ต์ฐฉ์ƒํƒœ์— ๊ฑธ๋ ค๋ฒ„๋ฆฌ๊ณ  ํ›„์†์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ํ™•์ธ(๊ฒ€์ถœ)๋˜๋ฉด ๊ต์ฐฉ์ƒํƒœ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ(ํšŒ๋ณต)ํ•œ๋‹ค. ๊ฐ€์žฅ ํ˜„์‹ค์ ์ด๊ณ  ๋ณดํŽธ์ ์ธ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ. ํ•ด๋‹น๊ณผ์ œ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋‹ค.