3. ์ž„๊ณ„๊ตฌ์—ญ(Critical section) ๋ฌธ์ œ

์œ„์˜ ์˜ˆ์—์„œ ๋ณด์•˜๋˜ ๋ฌธ์ œ๋ฅผ ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ๋ผ ํ•œ๋‹ค. ์ž„๊ณ„๊ตฌ์—ญ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ์‹œ์Šคํ…œ์—์„œ ๊ฐ ์“ฐ๋ ˆ๋“œ๋“ค์ด ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ(๋ณ€์ˆ˜, ํ…Œ์ด๋ธ”, ํŒŒ์ผ ๋“ฑ)๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ ์˜์—ญ์„ ๋งํ•œ๋‹ค. ์ด๋Š” ๋™๊ธฐํ™”์—์„œ ์ค‘์š”ํ•œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์€ํ–‰๊ณ„์ขŒ ๋ฌธ์ œ์—์„œ์˜ ์ž„๊ณ„๊ตฌ์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

void deposit(int amount) {
  balance = balance + amount;
}
void withdraw(int amount) {
  balance = balance - amount;
}

3.1 ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ž„๊ณ„๊ตฌ์—ญ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค.

  • Mutual exclusion(์ƒํ˜ธ๋ฐฐํƒ€)
    • ์˜ค์ง ํ•œ ์“ฐ๋ ˆ๋“œ๋งŒ์ด ์ง„์ž… ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„๊ตฌ์—ญ์—์„œ ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ๋Š” ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋Š” ์ ˆ๋Œ€ ์ด ๊ตฌ์—ญ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • Progress(์ง„ํ–‰)
    • ํ•œ ์ž„๊ณ„๊ตฌ์—ญ์— ์ ‘๊ทผํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์œ ํ•œ ์‹œ๊ฐ„ ์ด๋‚ด์— ์ด๋ฃจ์–ด์ ธ์•ผํ•œ๋‹ค.
    • ๋ˆ„๊ฐ€ ๋จผ์ € ๋“ค์–ด๊ฐˆ ๊ฒƒ์ธ์ง€ ๋น ๋ฅด๊ฒŒ ๊ฒฐ์ •ํ•ด๋ผ
  • Bounded waiting(์œ ํ•œ๋Œ€๊ธฐ)
    • ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ์ง„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋Š” ์œ ํ•œ ์‹œ๊ฐ„ ์ด๋‚ด์— ํ•ด๋‹น ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ์ง„์ž…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ง„์ž…๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋ผ.

4. ํ”„๋กœ์„ธ์Šค/์“ฐ๋ ˆ๋“œ ๋™๊ธฐํ™”์˜ ๋ชฉ์ 

  • ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœํ•˜๋„๋ก ์ž„๊ณ„๊ตฌ์—ญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์›ํ•˜๋Š”๋Œ€๋กœ ์ œ์–ดํ•œ๋‹ค.
  • Busy wait ๋“ฑ๊ณผ ๊ฐ™์€ ๋น„ํšจ์œจ์„ฑ์„ ์ œ๊ฑฐํ•œ๋‹ค.

Reference