ํ๋ก์ธ์ค ๋๊ธฐํ
1. ์ค๋ ๋ ์ธ์ดํ(Thread Safe)
๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ํจ์๋ ๋ณ์, ํน์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ค๋ ๋๋ก๋ถํฐ ๋์์ ์ ๊ทผ์ด ์ด๋ฃจ์ด์ ธ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ฌธ์ ๊ฐ ์์์ ๋ปํ๋ค. ๋ณด๋ค ์๋ฐํ๊ฒ๋ ํ๋์ ํจ์๊ฐ ํ ์ค๋ ๋๋ก๋ถํฐ ํธ์ถ๋์ด ์คํ ์ค์ผ ๋, ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๊ทธ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋์์ ํจ๊ป ์คํ๋๋๋ผ๋ ๊ฐ ์ค๋ ๋์์์ ํจ์์ ์ํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ก ๋์ค๋ ๊ฒ์ผ๋ก ์ ์ํ๋ค.
2. ์๊ณ ์์ญ(Critical Section)
์๊ณ ์์ญ์ด๋ ๋์ผํ ์์(๊ณต์ ์์)์ ๋์์ ์ ๊ทผํ๋ ์์ (๊ณต์ ๋ณ์ ์ฌ์ฉ, ๋์ผ ํ์ผ ์ฌ์ฉ ๋ฑ)์ ์คํํ๋ ์ฝ๋ ์์ญ์ด๋ค. ์ด๋ฌํ ์๊ณ ์์ญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ 3๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- ์ํธ ๋ฐฐ์ (Mutual Exclusion): ํ ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์์ ์คํ ์ค์ด๋ผ๋ฉด, ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์๊ณ ์์ญ์์ ์คํ๋ ์ ์๋ค.
- ์งํ(Progress): ์๊ณ ์์ญ์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์๊ณ ๋ณ๋์ ๋์์ด ์๋ ํ๋ก์ธ์ค๋ค๋ง ์๊ณ ์์ญ์ ์ง์ ํ๋ณด๋ก์ ์ฐธ์ฌ๋ ์ ์๋ค.
- ํ์ ๋ ๋๊ธฐ(Bounded Waiting): ํ๋ก์ธ์ค๊ฐ ์๊ณ ์์ญ์ ์ง์ ์ ์ฒญ ํ๋ถํฐ ๋ฐ์๋ค์ฌ์ง ๋๊น์ง ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์๊ณ ์์ญ์ ์ง์ ํ๋ ํ์๋ ์ ํ์ด ์์ด์ผ ํ๋ค.
3. ๋๊ธฐํ ๊ธฐ๋ฒ
1) LOCK
ํ๋์จ์ด ๊ธฐ๋ฐ ํด๊ฒฐ์ฑ ์ผ๋ก ๋์์ ๊ณต์ ์์์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์๊ณ ์์ญ์ ์ง์ ํ๋ ํ๋ก์ธ์ค๋ Lock์ ํ๋ํ๊ณ ๋น ์ ธ๋์ฌ ๋ Lock์ ๋ฐฉ์ถํจ์ผ๋ก์จ ๋์์ ์ ๊ทผ์ด ๋์ง ์๋๋ก ํ๋ค.
2) ์ธ๋งํฌ์ด(Semaphore)
์ํํธ์จ์ด ๊ธฐ๋ฐ ํด๊ฒฐ์ฑ ์ด๋ค.
- ์นด์ดํ (Counting) ์ธ๋งํฌ์ด: ๊ฐ์ฉํ ๊ฐ์๋ฅผ ๊ฐ์ง ์์์ ๋ํ ์ ๊ทผ ์ ์ด์ฉ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ ์ธ๋งํฌ์ด๋ฅผ ๊ฐ์ฉํ ์์์ ๊ฐ์๋ก ์ด๊ธฐํํ ํ ์์์ ์ฌ์ฉํ๋ฉด ์ธ๋งํฌ์ด ๊ฐ์, ๋ฐฉ์ถํ๋ฉด ์ธ๋งํฌ์ด๊ฐ ์ฆ๊ฐํ๋ค. ์ธ๋งํฌ์ด๊ฐ 0์ด๋ฉด ๋ชจ๋ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ๋ก ๋ค์ ์์ ์ ๋๊ธฐํด์ผ ํ๋ค.
// P: ์๊ณ ์์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ํ(ํ๋ก์ธ์ค ์ง์
์ฌ๋ถ๋ฅผ ์์์ ๊ฐ์(S)๋ฅผ ํตํด ๊ฒฐ์ )
// V : ์๊ณ ์์ญ์์ ๋์ฌ ๋ ์ํ(์์ ๋ฐ๋ฉ ์๋ฆผ, ๋๊ธฐ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ฐ๋ ์ ํธ)
procedure P(S) // ์ต์ด S๊ฐ์ 1์
while S=0 do wait // S๊ฐ 0๋ฉด 1์ด ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ
S := S-1 // S๋ฅผ 0๋ก ๋ง๋ค์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ค์ด ์ค์ง ๋ชปํ๋๋ก ํจ
end P
// ์๊ณ ์์ญ
procedure V(S) // ํ์ฌ์ํ๋ S๊ฐ 0์
S := S+1 // S๋ฅผ 1๋ก ์์์น์์ผ ํด์ ํ๋ ๊ณผ์
end V
- ์ด์ง(Binary) ์ธ๋งํฌ์ด: Mutex๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ๋ง ๊ฐ๋ฅํ๋ค. ์ผ์ข ์ ์๋ฌผ์ ์ญํ ๋ก ๋ฎคํ ์ค๋ฅผ ๊ฐ๊ณ ์์ด์ผ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ ์ ์๋ค.
- ๋ฐ์ ๋๊ธฐ: ์๊ณ ์์ญ์ ์ง์ ํด์ผ ํ๋ ํ๋ก์ธ์ค๋ ์ง์ ์ฝ๋๋ฅผ ๊ณ์ ๋ฐ๋ณต ์คํํด์ผ ํ๋ฉฐ CPU ์๊ฐ์ ๋ญ๋นํ๊ฒ ๋๋ค.
3) ๋ชจ๋ํฐ
๊ณ ๊ธ ์ธ์ด์ ์ค๊ณ ๊ตฌ์กฐ๋ฌผ๋ก์จ ๊ฐ๋ฐ์์ ์ฝ๋๋ฅผ ์ํธ ๋ฐฐ์ ํ๊ฒ๋ ๋ง๋ ์ถ์ํ๋ ๋ฐ์ดํฐ ํํ์ด๋ค. ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ํค ํ๋๊ณผ ์์ ์ฌ์ฉ ํ ํด์ ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๋ค.
4) ํด๊ฒฐ์ฑ ๋ค์ ์ฐจ์ด์
- ๋ฎคํ ์ค์ ๋ชจ๋ํฐ๋ ํ๋์ ๋์๋ง ๋๊ธฐํํ ์ ์๊ณ ์ธ๋งํฌ์ด๋ ํ๋ ์ด์์ ๋์์ ๋๊ธฐํํ ์ ์๋ค.
- ์ธ๋งํฌ์ด๋ ์์ ๊ฐ ๋ถ๊ฐ๋ฅํ์ง๋ง ๋ฎคํ ์ค๋ ์์ ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋ฎคํ ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค ๊ฐ ๋๊ธฐํ๋ฅผ ์ํด ์ฌ์ฉํ์ง๋ง ๋ชจ๋ํฐ๋ ํ๋์ ํ๋ก์ธ์ค ๋ด ๋ค๋ฅธ ์ค๋ ๋ ๊ฐ ๋๊ธฐํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ค.