๐Ÿ“–๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition)

  • Race Condition์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณต์œ  ์ž์›์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ์„ ๋‘๋Š” ๋™๊ธฐํ™” ๋ฐฉ์‹ ์ทจํ•ด์•ผ ํ•จ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด Semaphore์™€ Mutex

๐Ÿ“–Semaphore

๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ ๊ณต์œ  ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜ ์ด์ƒ
  • ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ์˜ ์ˆ˜๋ฅผ ๊ณตํ†ต์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์„ ์ด์šฉ โ†’ Mutal Exclusion ๋‹ฌ์„ฑ
  • ์‚ฌ์šฉ์ž๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ตœ๋Œ€ ํ—ˆ์šฉ์น˜๋งŒํผ ๋™์‹œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” Semaphore์˜ ๊ฐ’์„ ํ™•์ธํ•˜๊ณ  ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์ด๋ฏธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์‚ฌ์šฉ์ค‘์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜๋ฉด, ์žฌ์‹œ๋„ ์ „์— ์ผ์ •์‹œ๊ฐ„ ๋Œ€๊ธฐ
  • ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง€๋ฉด, ๋Œ€๊ธฐํ•˜๋˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฆ‰์‹œ ์ž์›์„ ์‚ฌ์šฉ

ํ™”์žฅ์‹ค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์นธ์ด ์žˆ๊ณ , ํ™”์žฅ์‹ค์˜ย ๋นˆ ์นธ ๊ฐœ์ˆ˜๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ „๊ด‘ํŒ ๊ฐ€์ง„ ๋ ˆ์Šคํ† ๋ž‘

  • ํ™”์žฅ์‹ค์„ ์ด์šฉํ•˜๋Š” ์‚ฌ๋žŒ : ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ
  • ํ™”์žฅ์‹ค : ๊ณต์œ  ์ž์›
  • ํ™”์žฅ์‹ค ๋นˆ์นธ์˜ ์ˆ˜ : ํ˜„์žฌ ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ˆ˜

๐Ÿ“–Mutex

๋™์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ณต์œ  ๋ถˆ๊ฐ€๋Šฅํ•œ ์ž์›์˜ ๋™์‹œ ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜
  • Critical Section์„ ๊ฐ€์ง„ ์Šค๋ ˆ๋“œ๋“ค์˜ Running Time์ด ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๊ณ  ๊ฐ๊ฐ ๋‹จ๋…์œผ๋กœ ์‹คํ–‰ โ†’ Mutal Exclusion ๋‹ฌ์„ฑ
  • Key์— ํ•ด๋‹นํ•˜๋Š” ์–ด๋– ํ•œ ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•œ ์Šค๋ ˆ๋“œ/ํ”„๋กœ์„ธ์Šค๋งŒ์ด ๊ณต์œ ์ž์›์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ฎคํ…์Šค ๊ฐ์ฒด๋ฅผ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€ ( โˆต Synchronization(๋™๊ธฐํ™”) ๋˜๋Š” Lock(๋ฝ) ์„ ์‚ฌ์šฉ)

ํ™”์žฅ์‹ค์ด ํ•˜๋‚˜๋ฐ–์— ์—†์–ด ํ™”์žฅ์‹ค์„ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ด์‡ ๋ฅผ ๋ฐ›์•„ ๊ฐ€์•ผ ํ•˜๋Š” ๋ ˆ์Šคํ† ๋ž‘

  • ํ™”์žฅ์‹ค์„ ์ด์šฉํ•˜๋Š” ์‚ฌ๋žŒ : ํ”„๋กœ์„ธ์Šค, ์Šค๋ ˆ๋“œ
  • ํ™”์žฅ์‹ค : ๊ณต์œ  ์ž์›
  • ํ™”์žฅ์‹ค ์—ด์‡  : ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์–ด๋–ค ์˜ค๋ธŒ์ ํŠธ

๐Ÿ“–Semaphore์™€ Mutex์˜ ์ฐจ์ด์ 

1. ๋™๊ธฐํ™” ๊ฐœ์ˆ˜

Semaphore : ๋™๊ธฐํ™” ๋Œ€์ƒ 1๊ฐœ ์ด์ƒ Mutex : ๋™๊ธฐํ™” ๋Œ€์ƒ 1๊ฐœ

2. Semaphore โ†’ Mutex ๐Ÿ™†๐Ÿปโ€โ™€๏ธ / Mutex โ†’ Semaphore ๐Ÿ™…๐Ÿปโ€โ™€๏ธ

Mutex๋Š” 0, 1๋กœ ์ด๋ฃจ์–ด์ง„ ์ด์ง„์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ Binary Semaphore๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ

3. ์ž์› ์†Œ์œ  ๊ฐ€๋Šฅ ์—ฌ๋ถ€

Semaphore : ์ž์› ์†Œ์œ  ๋ถˆ๊ฐ€ Mutex : ์ž์› ์†Œ์œ  ๊ฐ€๋Šฅ, ์ฑ…์ž„์„ ๊ฐ€์ง

  • ์ƒํƒœ๊ฐ€ 0, 1(์ด์ง„์ƒํƒœ)๋ฟ์ด๋ฏ€๋กœ Lock์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ

4. ํ•ด์ œ ๊ฐ€๋Šฅ ์Šค๋ ˆ๋“œ

Semaphore : ์†Œ์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๋„ ํ•ด์ œ ๊ฐ€๋Šฅ Mutex : ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋งŒ์ด ํ•ด์ œ ๊ฐ€๋Šฅ

5. ์‹œ์Šคํ…œ ๋ฒ”์œ„์™€ ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„

Semaphore : ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ์ ธ ์žˆ์œผ๋ฉฐ, ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ๋กœ ์กด์žฌ Mutex : ํ”„๋กœ์„ธ์Šค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ Clean Up