๐๊ฒฝ์ ์ํ(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