๐Ÿค” philosopher : ๋™์‹œ์„ฑ(Concurrency)์˜ ๋‘ ๊ฐ€์ง€ ๋‚œ์ œ, ๊ต์ฐฉ์ƒํƒœ์™€ ๊ฒฝ์Ÿ์ƒํƒœ

๋™์‹œ์„ฑ.

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

so_long์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋ฅผ ์‹œ๊ฐ์  ์„ธ๊ณ„๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒฝํ—˜์ด์—ˆ๋‹ค๋ฉด, philosopher๋Š” ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ์‹œ๊ฐ„์˜ ์ถ• ์œ„์—์„œ ์—ฌ๋Ÿฌ ์‹คํ–‰ ํ๋ฆ„์ด ์–ฝํž ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ, ์ฆ‰ ๋™์‹œ์„ฑ(Concurrency)์˜ ์‹ฌ์—ฐ์„ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ๊ณผ์ œ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ๊ณ ์ „์ ์ธ โ€˜์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž๋“คโ€™ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด, ํ˜„๋Œ€ ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•„์—ฐ์ ์œผ๋กœ ๋งˆ์ฃผํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ๋‚œ์ œ๋ฅผ ์šฐ๋ฆฌ ์•ž์— ์ œ์‹œํ•œ๋‹ค:

์ž์› ๊ฒฝ์Ÿ(Resource Competition)๊ณผ ์‹คํ–‰ ํ๋ฆ„์˜ ๋™๊ธฐํ™”(Synchronization).

์ด ๊ณผ์ œ๋Š” ๋‹จ์ˆœํžˆ ์Šค๋ ˆ๋“œ์™€ ๋ฎคํ…์Šค API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์„ ๋„˜์–ด์„ ๋‹ค.

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

๐Ÿ“œ ๋ฌธ์ œ์˜ ๋ณธ์งˆ: ํ•œ์ •๋œ ์ž์›๊ณผ ๋น„๊ฒฐ์ •์  ์‹คํ–‰ ์ˆœ์„œ

โ€˜์‹์‚ฌํ•˜๋Š” ์ฒ ํ•™์ž๋“คโ€™ ๋ฌธ์ œ๋Š” ๋™์‹œ์„ฑ ์‹œ์Šคํ…œ์˜ ์ถ•์†ŒํŒ์ด๋‹ค.

  • ์ฒ ํ•™์ž (Philosopher): ์Šค๋ ˆ๋“œ(Thread) ๋˜๋Š” ํ”„๋กœ์„ธ์Šค(Process)์™€ ๊ฐ™์€ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„๋ฅผ ์ƒ์ง•ํ•œ๋‹ค.
  • ํฌํฌ (Fork): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜, ํŒŒ์ผ ํ•ธ๋“ค๋Ÿฌ, ํ•˜๋“œ์›จ์–ด ์žฅ์น˜ ๋“ฑ ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ณต์œ  ์ž์›(Shared Resource)์„ ์ƒ์ง•ํ•œ๋‹ค.
  • ์‹์‚ฌ (Eating): ๊ณต์œ  ์ž์›์„ ์ ์œ ํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž„๊ณ„ ์˜์—ญ(Critical Section)์„ ์˜๋ฏธํ•œ๋‹ค.

์ด ๋ชจ๋ธ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š”, ๊ฐ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ์™€ ์‹œ์ ์„ ์šด์˜์ฒด์ œ์˜ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ฒฐ์ •์ (Non-deterministic)์ด๋ผ๋Š” ์‚ฌ์‹ค์—์„œ ์ถœ๋ฐœํ•œ๋‹ค. ์ด ๋น„๊ฒฐ์ •์„ฑ์ด ๋‘ ๊ฐ€์ง€ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๋‚ณ๋Š”๋‹ค.

  1. ๊ต์ฐฉ ์ƒํƒœ (Deadlock): ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ๊ฐ€ ์ ์œ ํ•œ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ. ์ด๋Š” ๋‹ค์Œ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด(Coffman Conditions)์ด ๋ชจ๋‘ ์ถฉ์กฑ๋  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
    • ์ƒํ˜ธ ๋ฐฐ์ œ (Mutual Exclusion): ์ž์›์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ ์œ  ๋Œ€๊ธฐ (Hold and Wait): ์ž์›์„ ํ•˜๋‚˜ ์ ์œ ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•˜๋ฉฐ ๋Œ€๊ธฐํ•œ๋‹ค.
    • ๋น„์„ ์  (No Preemption): ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ์œ ํ•œ ์ž์›์„ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์—†๋‹ค.
    • ํ™˜ํ˜• ๋Œ€๊ธฐ (Circular Wait): ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์Œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ์œ ํ•œ ์ž์›์„ ์š”๊ตฌํ•˜๋Š” ์›ํ˜•์˜ ๋Œ€๊ธฐ์—ด์ด ํ˜•์„ฑ๋œ๋‹ค.
  2. ๊ฒฝ์Ÿ ์ƒํƒœ (Race Condition): ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜์ •ํ•  ๋•Œ, ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋Š” ์ƒํ™ฉ. printf์™€ ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์ถœ๋ ฅ ํ•จ์ˆ˜์กฐ์ฐจ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๋™์ž‘ํ•˜๊ธฐ์—, ๋™๊ธฐํ™” ์—†์ด๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋’ค์„ž์—ฌ ๊นจ์ง€๋Š” ๊ฒฝ์Ÿ ์ƒํƒœ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.
  3. ๊ธฐ์•„ ์ƒํƒœ (Starvation): ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ํ• ๋‹น๋ฐ›์„ ๊ธฐํšŒ๋ฅผ ์˜์›ํžˆ ์–ป์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ๋Š” ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”์ง€๋งŒ, ๊ธฐ์•„ ์ƒํƒœ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค์€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š” ์™€์ค‘์— ์ผ๋ถ€ ์Šค๋ ˆ๋“œ๋งŒ ๊ณ ๋ฆฝ๋œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์–ด์ฐŒ ๋ณด๋ฉด ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋А๋‚Œ์„ ์ œ์‹œํ•˜์ง€๋งŒ, ์ •์ƒ์ ์ด์ง€ ๋ชปํ•œ ์Šค๋ ˆ๋“œ์—์„œ ๋‚˜์˜ค๋Š” ๋ฐ์ดํ„ฐ, ์ƒํƒœ ๊ฐ’, ๊ทธ ์™ธ์—๋„ ์‹œ์Šคํ…œ ์ƒํ˜ธ์ž‘์šฉ์—์„œ ์˜์กด์„ฑ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด๊ฐ€ ์˜ค์ž‘๋™, ์˜คํŒ์ด ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ด๋‹ค.

๐Ÿ› ๏ธ Part 1: ์Šค๋ ˆ๋“œ์™€ ๋ฎคํ…์Šค๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™” (Mandatory)

์ด ํŒŒํŠธ์˜ ๋ชฉํ‘œ๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์˜ ๋™์‹œ์„ฑ ๋‹จ์œ„์ธ ์Šค๋ ˆ๋“œ(Thread)์™€, ์ž„๊ณ„ ์˜์—ญ์„ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋™๊ธฐํ™” ๋„๊ตฌ์ธ ๋ฎคํ…์Šค(Mutex)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

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

๐Ÿš€ Part 2: ํ”„๋กœ์„ธ์Šค์™€ ์„ธ๋งˆํฌ์–ด๋ฅผ ์ด์šฉํ•œ IPC (Bonus)

๋ณด๋„ˆ์Šค ํŒŒํŠธ๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค(Process)๋ฅผ fork()๋กœ ์ƒ์„ฑํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC, Inter-Process Communication)์„ ํ†ตํ•ด ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ๋ชจ๋ธ์˜ ์ฐจ์ด: ์Šค๋ ˆ๋“œ์™€ ๋‹ฌ๋ฆฌ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฎคํ…์Šค์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ปค๋„ ์ˆ˜์ค€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” IPC ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ธ๋งˆํฌ์–ด (Semaphore): ๋ฎคํ…์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํ๋ฆ„๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์ž ๊ธˆ(lock)์ด๋ผ๋ฉด, ์„ธ๋งˆํฌ์–ด๋Š” ์ •ํ•ด์ง„ ๊ฐœ์ˆ˜(N)๋งŒํผ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋™์‹œ์— ํ—ˆ์šฉํ•˜๋Š” ๊ณ„์ˆ˜๊ธฐ(counter)์ด๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ชจ๋“  ํฌํฌ๋ฅผ ํ•˜๋‚˜์˜ ์ž์› ํ’€๋กœ ๋ณด๊ณ , ํฌํฌ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธ๋กœ ํ•˜๋Š” ์„ธ๋งˆํฌ์–ด ํ•˜๋‚˜๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒ ํ•™์ž๋Š” sem_wait์œผ๋กœ ํฌํฌ ํ•˜๋‚˜๋ฅผ ํš๋“(์นด์šดํŠธ ๊ฐ์†Œ)ํ•˜๊ณ , sem_post๋กœ ๋ฐ˜๋‚ฉ(์นด์šดํŠธ ์ฆ๊ฐ€)ํ•œ๋‹ค. ์ด๋Š” N๊ฐœ์˜ ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์žˆ์–ด N๊ฐœ์˜ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ชจ๋ธ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง: ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ waitpid๋ฅผ ํ†ตํ•ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•œ๋‹ค. ํ•œ ๋ช…์˜ ์ฒ ํ•™์ž๋ผ๋„ ์‚ฌ๋ง(๋น„์ •์ƒ ์ข…๋ฃŒ)ํ•˜๋ฉด, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ kill ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด ์ „์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์ •๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

โœจ ์„ฑ์ฐฐ ๋ฐ ๋ฐฐ์šด ์ 

philosopher๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์ด โ€˜ํ•„์š”ํ•˜์ง€๋งŒโ€™ ์™œ โ€˜ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ๊ฐ€?โ€™ ๋ผ๋Š” ๊ฒƒ์˜ ๋‹ต๊ณผ๋„ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ์˜€๋‹ค. ๋‹จ์ง€ ์ผ์„ ๋งŽ์ด, ์—ฌ๋Ÿฟ์ด ํ•œ๋‹ค๊ณ  ๊ทธ ์ผ์„ ์ž˜ ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์—†์œผ๋ฉฐ, ์˜คํžˆ๋ ค ์ •๋ณด์˜ ์ฒ˜๋ฆฌ, ์ •๋ณด์˜ ์†Œํ†ต ๊ณผ์ •์ด ์˜คํžˆ๋ ค ์ž‘์—…์˜ ๋”œ๋ ˆ์ด๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค๋Š”, trade-off ๊ฐ€ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค. ๋˜ํ•œ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๊ฐ€ ์™œ ์žฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋””๋ฒ„๊น…ํ•˜๊ธฐ ํž˜๋“ ์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹ ์ค‘ํ•œ ์„ค๊ณ„๊ฐ€ ์ค‘์š”ํ•œ์ง€๋ฅผ ๊ฐ€๋ฅด์ณ์ฃผ์—ˆ๋‹ค.

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