์ฌ์ ์ง์
์๊ณ ๊ตฌ์ญ(Critical section)
: ๋ค์์ ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ฉฐ ์คํ๋๋ ์ํฉ์์ ๊ฐ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ ๊ทผํ๋ ์ฝ๋ ๋ธ๋ก์ ์๋ฏธ
๋ค์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๊ณต์ ์์์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฒ ๋จ
- ์ฆ, ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์ผ ์์์ ๋์์ ์ฐธ์กฐํ์ฌ ๊ฐ(๊ณต์ ํ๋ ๋ณ์๋ช , ํ์ผ ๋ฑ)์ด ์ค์ผ๋ ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์ญ
- ํ๋ก๊ทธ๋๋ฐ ์, ์ฑ๋ฅ ํฅ์์ ์ํด ์๊ณ์์ญ์ ์ต์ํํ๋ ์ค๊ณ๋ฅผ ํด์ผ ํจ
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ํ์ ๋๋ ๋๊ธฐํ ๋ฐฉ์์ ์ทจํด์ผ ํจ
๋๊ธฐํ ๋๊ตฌ์๋ ๋ํ์ ์ผ๋ก ๋ฎคํ ์ค(Mutex)์ ์ธ๋งํฌ์ด(Semaphore)๊ฐ ์์
- ์ด๋ค์ ๋ชจ๋ ๊ณต์ ๋ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ค๋ ๋/ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ์ญํ ์ ํจ
๋ฎคํ ์ค(Mutex)๋?
๋์ ํ๋ก๊ทธ๋๋ฐ์์ ๊ณต์ ๋ถ๊ฐ๋ฅํ ์์์ ๋์ ์ฌ์ฉ์ ํผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์๊ณ๊ตฌ์ญ(Critical Section)์ ๊ฐ์ง ์ค๋ ๋๋ค์ ์คํ์๊ฐ(Running Time)์ด ์๋ก ๊ฒน์น์ง ์๊ณ ๊ฐ๊ฐ ๋จ๋ ์ผ๋ก ์คํ(์ํธ๋ฐฐ์ _Mutual Exclution) ๋๋๋ก ํ๋ ๊ธฐ์
- ํ ํ๋ก์ธ์ค์ ์ํด ์์ ๋ ์ ์๋ Key๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ํธ๋ฐฐ์ ๊ธฐ๋ฒ
- Key์ ํด๋นํ๋ ์ด๋ค ๊ฐ์ฒด(Object)๊ฐ ์์ผ๋ฉฐ, ์ด ๊ฐ์ฒด๋ฅผ ์์ ํ ์ค๋ ๋/ํ๋ก์ธ์ค๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ค.
- ๋ค์ค ํ๋ก์ธ์ค๋ค์ ๊ณต์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ ์กฐ์จํ๊ธฐ ์ํด ๋๊ธฐํ(Synchronization) ๋๋ ๋ฝ(Lock)์ ์ฌ์ฉ.
- ์ฆ, ๋ฎคํ ์ค ๊ฐ์ฒด๋ฅผ ๋ ์ค๋ ๋๊ฐ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
์์
๋ฎคํ ์ค๋ ํ์ฅ์ค์ด ํ๋๋ฟ์ธ ์๋น๊ณผ ๋น์ทํ๋ค. ํ์ฅ์ค์ ๊ฐ๊ธฐ ์ํด์๋ ์นด์ดํฐ์์ ์ด์ ๋ฅผ ๋ฐ์ ๊ฐ์ผ ํ๋ค.
๋น์ ์ด ํ์ฅ์ค์ ๊ฐ๋ ค๊ณ ํ๋๋ฐ ์นด์ดํฐ์ ํค๊ฐ ์์ผ๋ฉด ํ์ฅ์ค์ ์ฌ๋์ด ์๋ค๋ ๋ป์ด๊ณ ๋น์ ์ ๊ทธ ์ด์ ๋ฅผ ์ด์ฉํด ํ์ฅ์ค์ ๋ค์ด๊ฐ ์ ์๋ค.
๋น์ ์ด ํ์ฅ์ค์์ ํ๋ณตํ ์๊ฐ์ ๋ณด๋ด๊ณ ์๋๋ฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ์๋ ์ด๋ค ๋จ์๊ฐ ํ์ฅ์ค์ ๊ฐ๊ณ ์ถ์ด์ก๋ค.
์ด ๋จ์๋ ์๋ฌด๋ฆฌ ์ฉ๋ฌด๊ฐ ๊ธํ๋๋ผ๋ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ฅ์ค์ ๋ค์ด๊ฐ ์ ์๋ค.
๊ฒฐ๊ตญ ๋จ์๋ ๋น์ ์ด ์ฉ๋ฌด๋ฅผ ๋ง์น ํ ๋์ฌ ๋๊น์ง ์นด์ดํฐ์์ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
๊ณง์ด์ด ์ ํ
์ด๋ธ์ ์๋ ๋จ์๋ ํ์ฅ์ค์ ๊ฐ๊ณ ์ถ์ด ์ก๊ณ ์ด ๋จ์ ๋ํ ํ์ฅ์ค์ ๋ค์ด๊ฐ๊ธฐ ์ํด์๋ ์นด์ดํฐ์์ ๋๊ธฐํด์ผ ํ๋ค.
์ด์ ๋น์ ์ด ํ์ฅ์ค์์ ๋์ ์นด์ดํฐ์ ํค๋ฅผ ๋๋ ค๋์๋ค. ์ด์ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋๋ค ์ค ๋งจ ์์ ์๋ ์ฌ๋์ ํค๋ฅผ ๋ฐ์ ์ ์๊ณ ์ด๋ฅผ ์ด์ฉํด ํ์ฅ์ค์ ๊ฐ ์ ์๋ค.
๋ฎคํ ์ค๋ Key์ ํด๋นํ๋ ์ด๋ค ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉฐ ์ด ์ค๋ธ์ ํธ๋ฅผ ์์ ํ (์ค๋ ๋, ํ๋ก์ธ์ค) ๋ง์ด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ค.
- ํ์ฅ์ค = ๊ณต์ ์์
- ํ์ฅ์ค์ ์ด์ฉํ๋ ์๋๋ค = ํ๋ก์ธ์ค(์ค๋ ๋)
- ๋๊ธฐ ์ค = ํ
- ํ์ฅ์ค ํค = ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ ์ํด ํ์ํ ์ด๋ค ์ค๋ธ์ ํธ(๋ฎคํ ์ค)
์ธ๋งํฌ์ด(Semaphore)๋?
๋ฉํฐํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์์ ๊ณต์ ๋ ์์์ ๋ํ ์ ๊ทผ์ ์ ํํ๋ ๋ฐฉ๋ฒ
- ๊ณต์ ์์์ ์ํ๋ฅผ ๋ํ๋ผ ์ ์๋ ์นด์ดํฐ๋ก ์๊ฐํ ๋,
- ์ฌ์ฉํ๊ณ ์๋ ์ค๋ ๋/ํ๋ก์ธ์ค์ ์๋ฅผ ๊ณตํต์ผ๋ก ๊ด๋ฆฌํ๋ ํ๋์ ๊ฐ์ ์ด์ฉํด ์ํธ๋ฐฐ์ ๋ฅผ ๋ฌ์ฑํ๋ค.
- ์ด์์ฒด์ ๋๋ ์ปค๋์ ํ ์ง์ ๋ ์ ์ฅ์ฅ์น ๋ด์ ๊ฐ
- ์ผ๋ฐ์ ์ผ๋ก ๋น๊ต์ ๊ธด ์๊ฐ์ ํ๋ณดํ๋ ๋ฆฌ์์ค์ ๋ํ ์ด์ฉ
- ์ ๋์ค ํ๋ก๊ทธ๋๋ฐ์์ ์ธ๋งํฌ์ด๋ ์ด์์ฒด์ ์ ๋ฆฌ์์ค๋ฅผ ๊ฒฝ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ค์ค ํ๋ก์ธ์ค์์ ํ๋์ ์กฐ์ ํ๊ฑฐ๋ ๋๋ ๋๊ธฐํํ๋ ๊ธฐ์
- ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๋ ํ๋ก์ธ์ค์ ์ต๋ ํ์ฉ์น๋งํผ ๋์์ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ ์ ์๋ค.
- ๊ฐ ํ๋ก์ธ์ค๋ ์ธ๋งํฌ์ด์ ๊ฐ์ ํ์ธํ๊ณ ๋ณ๊ฒฝํ ์ ์๋ค.
- ์์์ ์ฌ์ฉํ์ง ์๋ ์ํ๊ฐ ๋ ๋, ๋๊ธฐํ๋ ํ๋ก์ธ์ค๊ฐ ์ฆ์ ์์์ ์ฌ์ฉํ๋ค.
- ์ด๋ฏธ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํด ์ฌ์ฉ ์ค์ด๋ผ๋ ์ฌ์ค์ ์๊ฒ ๋๋ฉด, ์ฌ์๋ ์ ์ ์ผ์ ์๊ฐ ๋๊ธฐํด์ผ ํ๋ค.
- ์ธ๋งํฌ์ด๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ธ์ค๋ ๊ทธ ๊ฐ์ ํ์ธํ๊ณ , ์์์ ์ฌ์ฉํ๋ ๋์์๋ ๊ทธ ๊ฐ์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ค๋ฅธ ์ธ๋งํฌ์ด ์ฌ์ฉ์๋ค์ด ๋๊ธฐํ๋๋ก ํด์ผ ํ๋ค.
- ์ธ๋งํฌ์ด๋ ์ด์ง์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ถ๊ฐ์ ์ธ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
์์
์ธ๋งํฌ์ด๋ ์๋์ด ํ์ฅ์ค์ ์ข ๋ ์ฝ๊ฒ ์ด์ฉํ ์ ์๋ ๋ ์คํ ๋์ด๋ค. ์ธ๋งํฌ์ด๋ฅผ ์ด์ฉํ๋ ๋ ์คํ ๋์ ํ์ฅ์ค์๋ ์ฌ๋ฌ ๊ฐ์ ์นธ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฅ์ค ์ ๊ตฌ์๋ ํ์ฌ ํ์ฅ์ค์ ๋น์นธ ๊ฐ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ ๊ดํ์ด ์๋ค.
๋ง์ฝ ๋น์ ์ด ํ์ฅ์ค์ ๊ฐ๊ณ ์ถ๋ค๋ฉด ์ ๊ตฌ์์ ๋น์นธ์ ๊ฐ์๋ฅผ ํ์ธํ๊ณ ๋น์นธ์ด 1๊ฐ ์ด์์ด๋ผ๋ฉด ๋น์นธ์ ๊ฐ์๋ฅผ ํ๋ ๋บ ๋ค์์ ํ์ฅ์ค๋ก ์ ์ฅํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ฌ ๋ ๋น์นธ์ ๊ฐ์๋ฅผ ํ๋ ๋ํด์ค๋ค.
๋ชจ๋ ์นธ์ ์ฌ๋์ด ๋ค์ด๊ฐ์ ๊ฒฝ์ฐ ๋น ์นธ์ ๊ฐ์๋ 0์ด ๋๋ฉฐ ์ด๋ ํ์ฅ์ค์ ๋ค์ด๊ฐ๊ณ ์ ํ๋ ์ฌ๋์ด ์๋ค๋ฉด ๋น ์นธ์ ๊ฐ์๊ฐ 1๋ก ๋ฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
์ฌ๋๋ค์ ๋์ค๋ฉด์ ๋น ์นธ์ ๊ฐ์๋ฅผ 1์ฉ ๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋์ ์ด ์ซ์์์ ๋ค์ 1์ ๋บ ๋ค์ ํ์ฅ์ค๋ก ๋์งํ๋ค.
์ด์ฒ๋ผ ์ธ๋งํฌ์ด๋ ๊ณตํต์ผ๋ก ๊ด๋ฆฌํ๋ ํ๋์ ๊ฐ์ ์ด์ฉํด ์ํธ๋ฐฐ์ ๋ฅผ ๋ฌ์ฑํจ
- ํ์ฅ์ค = ๊ณต์ ์์
- ํ์ฅ์ค์ ์ด์ฉํ๋ ์๋๋ค = ํ๋ก์ธ์ค(์ค๋ ๋)
- ๋๊ธฐ ์ค = ํ
- ์ ๊ดํ์ ์ซ์ = ๊ณต์ ์์์ ์ ๊ทผ๊ฐ๋ฅํ ํ๋ก์ธ์ค์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ด๋ค ๋ณ์(์ธ๋งํฌ์ด)
๋ฎคํ ์ค์ ์ธ๋งํฌ์ด์ ์ฐจ์ด์
1. ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋๊ธฐํ ๋์์ ๊ฐ์
- Mutex๋ ๋๊ธฐํ ๋์์ด only 1๊ฐ์ผ ๋ ์ฌ์ฉ
- Semaphore๋ ๋๊ธฐํ ๋์์ด 1๊ฐ ์ด์์ผ ๋ ์ฌ์ฉ
2. Semaphore๋ Mutex๊ฐ ๋ ์ ์์ง๋ง, Mutex๋ Semaphore๊ฐ ๋ ์ ์์
- Mutex๋ 0, 1๋ก ์ด๋ฃจ์ด์ง ์ด์ง ์ํ๋ฅผ ๊ฐ์ง๋ฏ๋ก Binary Semaphore!
3. Mutex๋ ์์ ์์ ๊ฐ๋ฅ + ์ฑ ์์ ๊ฐ์ง๋ ๋ฐ๋ฉด, Semaphore๋ ์์ ์์ ๋ถ๊ฐ
- Mutex๋ ์ํ 0, 1 ๋ฟ์ด๋ฏ๋ก Lock ๊ฐ์ง ์ ์์
4. Mutex๋ ์์ ํ๊ณ ์๋ ์ค๋ ๋๋ง์ด ์ด Mutex๋ฅผ ํด์ ํ ์ ์์
- ๋ฐ๋ฉด, Semaphore๋ Semaphore๋ฅผ ์์ ํ์ง ์๋ ์ค๋ ๋๊ฐ Semaphore๋ฅผ ํด์ ํ ์ ์์
5. Semaphore๋ ์์คํ ๋ฒ์์ ๊ฑธ์ณ ์๊ณ , ํ์ผ ์์คํ ์์ ํ์ผ๋ก ์กด์ฌํจ
- ๋ฐ๋ฉด, Mutex๋ ํ๋ก์ธ์ค์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ ํ๋ก์ธ์ค ์ข ๋ฃ๋ ๋ ์๋์ผ๋ก Clean up (ํด์ )๋จ
๋ฎคํ ์ค์ ์ธ๋งํฌ์ด๋ ๋ชจ๋ ์๋ฒฝํ ๊ธฐ๋ฒ์ ์๋๋ฏ๋ก, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ ์ ์์ผ๋ฉฐ ๋ชจ๋ ๊ต์ฐฉ ์ํ๋ฅผ ํด๊ฒฐํ์ง๋ ๋ชปํจ
ํ์ง๋ง, ์ํธ๋ฐฐ์ ๋ฅผ ์ํ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฒ์ด๋ฉฐ ์ฌ๊ธฐ์ ์ข ๋ ๋ณต์กํ ๋ฉ์ปค๋์ฆ์ ์ ์ฉํด ๊ฐ์ ๋ ์ฑ๋ฅ์ ๊ฐ์ง ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ค์