Race Condition
Race Condition (๊ฒฝ์ ์ํ) ์ด๋?
๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๊ณตํต ์์์ ๋์์ ์ฝ๊ฑฐ๋ ์ฐ๋ ๋์์ ํ ๋, ๊ณต์ฉ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ ์์์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ง ์๊ณ ๋ฌ๋ผ์ง๋ ์ํฉ์ ๋ปํ๋ค.
Race์ ๋ป ๊ทธ๋๋ก, ๋๊ฐ์ ์ค๋ ๋๊ฐ ํ๋์ ์์์ ๋๊ณ ์๋ก ์ฌ์ฉํ๋ ค๊ณ ๊ฒฝ์ํ๋ ์ํฉ์ ๋งํ๋ค.
Race Condition ์์
์์ฐ์ - ์๋น์ ๋ชจ๋ธ

์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด A์ B ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ๋ฒํผ๋ฅผ ๊ณต์ ํ๊ณ ์๋ ์ํ์ด๊ณ , A๋ ๊ณต์ ํ๊ณ ์๋ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ ๋ฃ๊ณ , B๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ค. ( ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐจ์์ผ๋ฉด A๋ ๋น ๊ณต๊ฐ์ด ์๊ธธ ๋๊น์ง ๋๊ธฐํ๊ณ , ๋ฒํผ๊ฐ ํ ๋น์ด์์ผ๋ฉด B๋ A๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค ๋๊น์ง ๋๊ธฐํ๋ค. )
์ฌ๊ธฐ์ ๋ ํ๋ก์ธ์ค๋ counter๋ผ๋ intํ ๋ณ์๋ฅผ ์ด์ฉํด ๋ฒํผ์ ์ผ๋งํผ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ํ์
ํ๋ค.
์ด๋ฌํ ์ํฉ์์ A๋ counter++, B๋ counter-- ์ ์คํํ๊ฒ ๋๋ค.
- ์์๋๋ก A๊ฐ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์๋ฃ๊ณ , B๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒฝ์ฐ
โ counter ๊ฐ ์ ์ง
- ํ์ง๋ง A๊ฐ ํธ์ถ๋๊ณ ๋ฐ๋ก ์งํ B๊ฐ ์คํ๋์ด, A์ ์ฐ์ฐ์ด ๋๋๊ธฐ ์ ์ B๊ฐ ์คํ๋์ด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ
โ A์ B์ counter ๊ฐ์ด ์๋ก ๋ฌ๋ผ ์์คํ
์ ์ค๋ฅ ๋ฐ์
์ด์ฒ๋ผ ๊ณต์ฉ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ ์์์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ์ง ์๋ ์ํฉ์ด Race Condition์ด๋ค.
๋ฐ์ ํ๊ฒฝ
1. ๋ฉํฐ ํ๋ก์ธ์ค / ์ค๋ ๋
๋ฉํฐ ํ๋ก์ธ์ค ํ๊ฒฝ์์ 2๊ฐ์ PCU๊ฐ ๋์์ ์ปค๋ ๋ด๋ถ์ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๊ฒฝ์ฐ
๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณตํต ์์์ ๋ณํํ์ฌ ์์ ํ ๋
โ ํด๊ฒฐ๋ฒ : ์ปค๋ ๋ด๋ถ์ ์๋ ๊ฐ ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋๋ง๋ค, ๊ทธ ๋ฐ์ดํฐ์ ๋ํ lock/unlock์ ํ๋ค.
2. ์ปค๋ ์์
์ปค๋ ๋ชจ๋์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ฌ ์์ ์ ์ํํ๋ค๊ฐ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ์ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒฝ์ฐ
โ ํด๊ฒฐ๋ฒ : ์ปค๋๋ชจ๋์์ ์์ ์ ์ํํ๋ ๋์, ์ธํฐ๋ฝํธ๋ฅผ disable ์์ผ CPU ์ ์ด๊ถ์ ๊ฐ์ ธ๊ฐ์ง ๋ชปํ๋๋ก ํ๋ค.
3. ํ๋ก์ธ์ค์ ์์คํ
์ฝ
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํ์ฌ ์ปค๋๋ชจ๋๋ก ์ง์ ํ์ฌ ์์ ์ ์ํํ๋ ๋์ค ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ์ค, ์๊ฐ์ด ์ด๊ณผ๋์ด CPU ์ ์ด๊ถ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒฝ์ฐ
โ ํด๊ฒฐ๋ฒ : ํ๋ก์ธ์ค๊ฐ ์ปค๋๋ชจ๋์์ ์์ ์ ํ๋ ๊ฒฝ์ฐ ์๊ฐ์ด ์ด๊ณผ๋์ด๋ CPU ์ ์ด๊ถ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ๋๊ฒจ์ฃผ์ง ๋ชปํ๋๋ก ํ๋ค.
Last updated