๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ 42seoul ํ”„๋กœ์ ํŠธ

[42seoul] Philosophers : ์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž ๋ฌธ์ œ

by kukim 2021. 10. 28.

๐Ÿ“š Philosophers

@42seoul : (2021.01.04 ~ 2021.01.20)

๐Ÿ“– About

  • ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ๋ณธ์ ์ธ ํ”„๋กœ์„ธ์Šค ์Šค๋ ˆ๋”ฉ, mutex, semaphore, shared memory์„ ๋ฐฐ์›๋‹ˆ๋‹ค.(In this project, you will learn the basics of threading a process and how to work on the same memory space. You will learn how to make threads. You will discover the mutex, semaphore and shared memory.)
  • C์–ธ์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ Dining philosophers problem ๋ฌธ์ œ๋ฅผ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
philo

ํ”„๋กœ๊ทธ๋žจ ์‚ฌํ•ญ

  1. Program 1 philo_one : Mutex
    • ์ฒ ํ•™์ž๋Š” ์“ฐ๋ ˆ๋“œ์ด๋‹ค.
    • ์›ํƒ์— ์•‰์•„์žˆ๊ณ , ์–‘ ์˜†์— ํฌํฌ๊ฐ€ ์žˆ๋‹ค.
  2. Program 2 philo_two : Semaphore
    • ์ฒ ํ•™์ž๋Š” ์“ฐ๋ ˆ๋“œ์ด๋‹ค.
    • ์›ํƒ์— ์•‰์•„์žˆ๊ณ , ํ…Œ์ด๋ธ” ์ค‘์•™์— ํฌํฌ๊ฐ€ ์žˆ๋‹ค.
  3. Program 3 philo_three : shared memory
    • ์ฒ ํ•™์ž๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.
    • ์›ํƒ์— ์•‰์•„์žˆ๊ณ , ํ…Œ์ด๋ธ” ์ค‘์•™์— ํฌํฌ๊ฐ€ ์žˆ๋‹ค.
  • ์กฐ๊ฑด
    • ์ฒ ํ•™์ž๋Š” 2๋ช… ์ด์ƒ์ด๋‹ค.
    • ์ฒ ํ•™์ž๋Š” ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ๋จน์ง€ ์•Š์œผ๋ฉด ์ฃฝ๋Š”๋‹ค.
    • ์ฒ ํ•™์ž ํ•œ ๋ช…์ด ์ฃฝ์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค. (์ฃฝ๋Š” ์‹œ๊ฐ„ ๊ธฐ์ค€10ms ์•ˆ์— ์ข…๋ฃŒ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.)
    • ์ฒ ํ•™์ž๋Š” ๋จน๊ธฐ์œ„ํ•ด ํฌํฌ 2๊ฐœ๋ฅผ ์ง‘์–ด์•ผ ํ•œ๋‹ค.
    • ์ฒ ํ•™์ž๋Š” ๋จน๊ณ  -> ์ž๊ณ  -> ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ธ์ž๋Š” ์ด 5๊ฐœ or 6๊ฐœ์ด๋‹ค.
    • ./philo_one number_of_philosophers time_to_die time_to_eat time_to_sleep [number_of_times_each_philosopher_must_eat]
    • ex) ./philo_one 2 310 100 100 2 ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค๋ฉด
      • ์ฒ ํ•™์ž ์ˆ˜ 2๋ช…
      • 310ms์•ˆ์— ๋จน์–ด์•ผ ์ฒ ํ•™์ž ์ƒ์กด
      • 100ms๋™์•ˆ ๋จน๋Š”๋‹ค
      • 100ms๋™์•ˆ ์ž”๋‹ค
      • ๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ 2๋ฒˆ ๋จน์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
    • ์ฒ ํ•™์ž๋Š” ํ”„๋กœ๊ทธ๋žจ์— ๋”ฐ๋ผ ์“ฐ๋ ˆ๋“œ์ด๊ธฐ๋„ ํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค์ด๊ธฐ๋„ ํ•˜๋‹ค.

๐Ÿ“ Review

  • ์“ฐ๋ ˆ๋“œ๋‚˜ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ์‹คํ–‰ ์‹œ๊ธฐ๋ฅผ ๋งž์ถ”๋Š” ๋™์•ˆ(๋™๊ธฐํ™”(Synchronization))์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด A, B, C ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” int count๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•œ๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋‚˜์˜ฌ ๊ฒƒ ์ด๋‹ค. ๋˜ํ•œ ๋‘ ๊ฐœ์˜ ์ž‘์—…์ด ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์˜ ์ž‘์—…์ด ๋๋‚˜๊ธธ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฌ๊ฑฐ๋‚˜(deadlock, ๊ต์ฐฉ์ƒํƒœ) ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์•„์„œ ์•„์˜ˆ ์ž์›ํ• ๋‹น์„ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค(stravation, ๊ธฐ์•„์ƒํƒœ).
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” data๋ฅผ Exclusive Access, ์–ด๋Š ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ง‰๋Š” ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ–ˆ๋‹ค.
  • Mutex์™€ Semaphore์— ๋Œ€ํ•œ ์ด๋ก ์  ๊ฐœ๋…๊ณผ ์ด๋ฅผ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๐Ÿ Run

  • Test
    • ./program 5 800 200 200 7 : 7๋ฒˆ ๋‹ค ๋จน์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
    • ./program 4 410 200 200 : ๋ฌดํ•œ ๋ฃจํ”„
    • ./program 2 310 200 100 (10ms ์•ˆ์— ์ฃฝ๋Š” ๊ฒƒ ํ™•์ธ)
  1. philo_one : Mutex version
philo_one
  1. philo_two : Semaphore version
philo_two
  1. philo_three : Shared memory version
philo_three

๐Ÿ”— Reference

๐Ÿง‘๐Ÿป‍๐Ÿ’ป Author

kukim

ํƒœ๊ทธ

, ,

๋Œ“๊ธ€0