philosophers - KimTaebin-ai/study_posts GitHub Wiki

ํ•„์š” ๊ฐœ๋… ๋ฐ ํ•™์Šต ๋‚ด์šฉ

๋ฐ์ดํ„ฐ ๋ ˆ์ด์Šค

ํ”„๋กœ์„ธ์Šค ์Šค๋ ˆ๋”ฉ

๋ฎคํ…์Šค

์„ธ๋งˆํฌ์–ด

์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž

๋ฌธ์ œ ๊ฐœ์š”

arguments

์ฒ ํ•™์ž ์ˆ˜, ์ˆ˜๋ช…, ๋ฐฅ์„ ๋จน๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„, ์ž ์ž๋Š” ์‹œ๊ฐ„, ๊ฐ ์ฒ ํ•™์ž๊ฐ€ ์ตœ์†Œํ•œ ๋ฐฅ์„ ๋จน์–ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜

int		number_of_philosophers;
/*
	์ฒ ํ•™์ž์˜ ์ˆ˜ :
	์ฒ ํ•™์ž์˜ ์ˆ˜์™€ ํฌํฌ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.
*/

int		time_to_die;
/*
	์ฒ ํ•™์ž์˜ ์ˆ˜๋ช…(๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„) :
	์ฒ ํ•™์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐฅ์„ ๋จน๊ธฐ ์‹œ์ž‘ํ•œ ์‹œ์ ์œผ๋กœ๋ถ€ํ„ฐ
	time_to_die ์‹œ๊ฐ„๋งŒํผ์ด ์ง€๋‚˜๊ฑฐ๋‚˜,
	ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ํ›„ time_to_die ์‹œ๊ฐ„๋งŒํผ์ด ์ง€๋‚˜๋„๋ก
	์‹์‚ฌ๋ฅผ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์ฒ ํ•™์ž๋Š” ์‚ฌ๋งํ•ฉ๋‹ˆ๋‹ค.
*/

int		time_to_eat;
/*
	๋ฐฅ์„ ๋จน๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„) :
	์ฒ ํ•™์ž๊ฐ€ ๋ฐฅ์„ ๋จน๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
	ํ•ด๋‹น ์‹œ๊ฐ„๋™์•ˆ ์ฒ ํ•™์ž๋Š” ๋‘ ๊ฐœ์˜ ํฌํฌ๋ฅผ ์žก๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
*/

int		time_to_sleep;
/*
	์ž ์ž๋Š” ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„) :
	์ž ์„ ์ž๋Š” ๋ฐ ์†Œ๋ชจ๋˜๋Š” ์‹œ๊ฐ„ ์ž…๋‹ˆ๋‹ค.
*/
int		number_of_times_each_philosopher_must_eat;
/*
	๊ฐ ์ฒ ํ•™์ž๊ฐ€ ์ตœ์†Œํ•œ ๋ฐฅ์„ ๋จน์–ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜(์„ ํƒ์  ์ธ์ž):
	๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ number_of_times_each_philosopher_must_eat ๋ฒˆ ์ด์ƒ
	๋ฐฅ์„ ๋จน์œผ๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
	์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์ฒ ํ•™์ž๊ฐ€ ์ฃฝ์„ ๋•Œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
*/

์ถœ๋ ฅ๊ฐ’

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

๊ฐœ๋ฐœ ์ˆœ์„œ

  • 1 argv
  • 2 invalid check
  • 3 table init
  • 4 philosopher init
  • 5 eat func
  • 6 sleep func
  • 7 think func
  • 8-1 argc๊ฐ€ 5๊ฐœ์ผ ๋•Œ ์ฃฝ๋Š” ์ฒ ํ•™์ž ์ˆ˜ die
  • 8-2 argc๊ฐ€ 6๊ฐœ์ผ ๋•Œ must ์ฒ˜๋ฆฌ
  • 9 pthread join ๊ธฐ๋‹ค๋ฆฐ ํ›„ free