์ ์ธ๊ณ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋์์ฑ ์ ์ด์ ๋ํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค. ์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ, ๋ฎคํ ์ค, ์ธ๋งํฌ์ด, ๊ต์ฐฉ ์ํ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํด๋ณด์ธ์.
๋์์ฑ ๋ง์คํฐํ๊ธฐ: ์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ ์ฌ์ธต ๋ถ์
๋ถ์ฃผํ ์ ๋ฌธ ์ฃผ๋ฐฉ์ ์์ํด ๋ณด์ธ์. ์ฌ๋ฌ ๋ช ์ ์๋ฆฌ์ฌ๊ฐ ๋์์ ์ผํ๋ฉด์ ๋ชจ๋ ๊ณต์ ์๋ฃํ ์ ์ฅ์ค์ ์ ๊ทผํด์ผ ํฉ๋๋ค. ๋ง์ฝ ๋ ๋ช ์ ์๋ฆฌ์ฌ๊ฐ ํฌ๊ท ํฅ์ ๋ฃ ๋ง์ง๋ง ๋ณ์ ๋์์ ์ก์ผ๋ ค๊ณ ํ๋ค๋ฉด ๋๊ฐ ๊ฐ์ ธ๊ฐ๊น์? ํ ์๋ฆฌ์ฌ๊ฐ ๋ ์ํผ ์นด๋๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋์ ๋ค๋ฅธ ์๋ฆฌ์ฌ๊ฐ ์ฝ๊ณ ์์ด ๋ฐ์ฏค ์ฐ์ฌ์ง, ๋ง๋ ์ ๋๋ ์ง์นจ์ด ๋์ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด ์ฃผ๋ฐฉ์ ํผ๋์ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํต์ฌ ๊ณผ์ ์ธ ๋์์ฑ์ ๋ํ ์๋ฒฝํ ๋น์ ์ ๋๋ค.
์ค๋๋ ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์, ๋ถ์ฐ ์์คํ ๋ฐ ์๋ต์ฑ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๊ณ์์ ๋์์ฑ(ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ถ๋ถ์ด ์ต์ข ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์์ ์์ด ๋๋ ๋ถ๋ถ์ ์ผ๋ก ์คํ๋ ์ ์๋ ๋ฅ๋ ฅ)์ ์ฌ์น๊ฐ ์๋๋ผ ํ์์ ๋๋ค. ๋น ๋ฅธ ์น ์๋ฒ, ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ฐ ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ์ ์์ง์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฅ๋ ฅ์๋ ์๋นํ ๋ณต์ก์ฑ์ด ๋ฐ๋ฆ ๋๋ค. ์ฌ๋ฌ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฆฌ์์ค์ ๋์์ ์ ๊ทผํ๋ฉด ์๋ก ๊ฐ์ญํ์ฌ ๋ฐ์ดํฐ ์์, ์์ธก ๋ถ๊ฐ๋ฅํ ๋์ ๋ฐ ์ค์ํ ์์คํ ์ค๋ฅ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ์ด๋ด ๋ ๋์์ฑ ์ ์ด๊ฐ ํ์ํฉ๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ด๋ฌํ ์ ์ด๋ ํผ๋์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ์ ์ด์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ธ ์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ๋ฅผ ์ดํด๋ด ๋๋ค. ์ ๊ธ์ด ๋ฌด์์ธ์ง ์์๋ณด๊ณ , ๋ค์ํ ํํ๋ฅผ ํ์ํ๊ณ , ์ํํ ํจ์ ์ ํค์ณ๋๊ฐ๋ฉฐ, ๊ฐ๋ ฅํ๊ณ ์์ ํ๋ฉฐ ํจ์จ์ ์ธ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ธ๋ก๋ฒ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ๋ฆฝํ ๊ฒ์ ๋๋ค.
๋์์ฑ ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก ๋์์ฑ ์ ์ด๋ ๊ณต์ ๋ฐ์ดํฐ์ ๋ํ ๋์ ์์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ ๋ ํ๋ ์ปดํจํฐ ๊ณผํ ๋ถ์ผ์ ๋๋ค. ์ฃผ์ ๋ชฉํ๋ ๋์ ์์ ์ด ์๋ก ๊ฐ์ญํ์ง ์๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋๋ก ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ ๋๋ค. ์๋ฆฌ์ฌ๊ฐ ์์ง๋ฅด๊ฑฐ๋ ์์ด๊ฑฐ๋ ์ฌ๋ฃ๋ฅผ ๋ญ๋นํ์ง ์๋๋ก ์๋ฃํ ์ ์ฅ์ค์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ท์น์ ์ค์ ํ๋ ์ฃผ๋ฐฉ ๊ด๋ฆฌ์๋ผ๊ณ ์๊ฐํ์ญ์์ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๊ณ์์ ๋์์ฑ ์ ์ด๋ ACID ์์ฑ(์์์ฑ, ์ผ๊ด์ฑ, ๊ฒฉ๋ฆฌ์ฑ, ์ง์์ฑ), ํนํ ๊ฒฉ๋ฆฌ์ฑ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๊ฒฉ๋ฆฌ์ฑ์ ํธ๋์ญ์ ์ ๋์ ์คํ์ด ํธ๋์ญ์ ์ด ์ง๋ ฌ๋ก, ์ฆ ํ๋์ฉ ์คํ๋ ๊ฒฝ์ฐ ์ป์ ์ ์๋ ์์คํ ์ํ๋ฅผ ์ด๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋์์ฑ ์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ฒ ํ์ด ์์ต๋๋ค.
- ๋๊ด์ ๋์์ฑ ์ ์ด: ์ด ์ ๊ทผ ๋ฐฉ์์ ์ถฉ๋์ด ๋๋ฌผ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฌ์ ์ ๊ฒ ์์ด ์์ ์ ์งํํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ๊ธฐ ์ ์ ์์คํ ์ ๋ค๋ฅธ ์์ ์ด ๊ทธ๋์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋์ง ํ์ธํฉ๋๋ค. ์ถฉ๋์ด ๊ฐ์ง๋๋ฉด ์์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋กค๋ฐฑ๋๊ณ ์ฌ์๋๋ฉ๋๋ค. "ํ๋ฝ์ ๊ตฌํ๊ธฐ๋ณด๋ค๋ ์ฉ์๋ฅผ ๊ตฌํ๋" ์ ๋ต์ ๋๋ค.
- ๋น๊ด์ ๋์์ฑ ์ ์ด: ์ด ์ ๊ทผ ๋ฐฉ์์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ค๋ฅธ ์์ ์ด ๊ฐ์ญํ์ง ๋ชปํ๋๋ก ์์ ์ ์ํํ๊ธฐ ์ ์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ธ์ ํ๋ํ๋๋ก ๊ฐ์ ํฉ๋๋ค. "์ฉ์๋ฅผ ๊ตฌํ๊ธฐ๋ณด๋ค๋ ํ๋ฝ์ ๊ตฌํ๋" ์ ๋ต์ ๋๋ค.
์ด ๊ธฐ์ฌ์์๋ ์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ์ ๊ธฐ์ด์ธ ๋น๊ด์ ์ ๊ทผ ๋ฐฉ์์๋ง ์ง์คํฉ๋๋ค.
ํต์ฌ ๋ฌธ์ : ๊ฒฝ์ ์กฐ๊ฑด
ํด๊ฒฐ์ฑ ์ ์ ๋๋ก ์ดํดํ๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ์์ ํ ์ดํดํด์ผ ํฉ๋๋ค. ๋์ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ํํ๊ณ ๋์ฐํ ๋ฒ๊ทธ๋ ๊ฒฝ์ ์กฐ๊ฑด์ ๋๋ค. ๊ฒฝ์ ์กฐ๊ฑด์ ์์คํ ์ ๋์์ด ์ด์ ์ฒด์ ์ ์ํ ์ค๋ ๋ ์ค์ผ์ค๋ง๊ณผ ๊ฐ์ด ์ ์ดํ ์ ์๋ ์ด๋ฒคํธ์ ์์ธก ๋ถ๊ฐ๋ฅํ ์์๋ ํ์ด๋ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ๋ ๋ฐ์ํฉ๋๋ค.
๊ณ ์ ์ ์ธ ์์ธ ๊ณต์ ์ํ ๊ณ์ข๋ฅผ ์๊ฐํด ๋ด ์๋ค. ๊ณ์ข์ $1000์ ์์ก์ด ์๊ณ ๋ ๊ฐ์ ๋์ ์ค๋ ๋๊ฐ ๊ฐ๊ฐ $100๋ฅผ ์ ๊ธํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๋ค์์ ์ ๊ธ์ ๋ํ ๋จ์ํ๋ ์์ ์์์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ์์ ํ์ฌ ์์ก์ ์ฝ์ต๋๋ค.
- ์ ๊ธ์ก์ ์ด ๊ฐ์ ๋ํฉ๋๋ค.
- ์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ์๋๋ค.
์ฌ๋ฐ๋ฅธ ์ง๋ ฌ ์คํ์ ์ต์ข ์์ก์ด $1200๊ฐ ๋ฉ๋๋ค. ํ์ง๋ง ๋์ ์๋๋ฆฌ์ค์์๋ ์ด๋ป๊ฒ ๋ ๊น์?
์์ ์ ์ ์ฌ์ ์ธ ์ธํฐ๋ฆฌ๋น:
- ์ค๋ ๋ A: ์์ก($1000)์ ์ฝ์ต๋๋ค.
- ์ปจํ ์คํธ ์ ํ: ์ด์ ์ฒด์ ๊ฐ ์ค๋ ๋ A๋ฅผ ์ผ์ ์ค์งํ๊ณ ์ค๋ ๋ B๋ฅผ ์คํํฉ๋๋ค.
- ์ค๋ ๋ B: ์์ก(์ฌ์ ํ $1000)์ ์ฝ์ต๋๋ค.
- ์ค๋ ๋ B: ์ ์์ก($1000 + $100 = $1100)์ ๊ณ์ฐํฉ๋๋ค.
- ์ค๋ ๋ B: ์ ์์ก($1100)์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ์๋๋ค.
- ์ปจํ ์คํธ ์ ํ: ์ด์ ์ฒด์ ๊ฐ ์ค๋ ๋ A๋ฅผ ๋ค์ ์์ํฉ๋๋ค.
- ์ค๋ ๋ A: ์ด์ ์ ์ฝ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ์์ก($1000 + $100 = $1100)์ ๊ณ์ฐํฉ๋๋ค.
- ์ค๋ ๋ A: ์ ์์ก($1100)์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ์๋๋ค.
์ต์ข ์์ก์ ์์๋๋ $1200๊ฐ ์๋ $1100์ ๋๋ค. ๊ฒฝ์ ์กฐ๊ฑด์ผ๋ก ์ธํด $100 ์๊ธ์ด ์ฌ๋ผ์ก์ต๋๋ค. ๊ณต์ ๋ฆฌ์์ค(๊ณ์ข ์์ก)์ ์ ๊ทผํ๋ ์ฝ๋ ๋ธ๋ก์ ์๊ณ ์์ญ์ด๋ผ๊ณ ํฉ๋๋ค. ๊ฒฝ์ ์กฐ๊ฑด์ ๋ฐฉ์งํ๋ ค๋ฉด ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์๊ณ ์์ญ ๋ด์์ ์คํํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. ์ด ์์น์ ์ํธ ๋ฐฐ์ ๋ผ๊ณ ํฉ๋๋ค.
์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ ์๊ฐ
์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ๋ ์ํธ ๋ฐฐ์ ๋ฅผ ์ํํ๊ธฐ ์ํ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ ๊ธ(๋ฎคํ ์ค๋ผ๊ณ ๋ ํจ)์ ์๊ณ ์์ญ์ ๋ณดํธ ์ญํ ์ ํ๋ ๋๊ธฐํ ๊ธฐ๋ณธ ์์์ ๋๋ค.
๋จ์ผ ์ ์ ํ์ฅ์ค์ ๋ํ ์ด์ ์ ๋น์ ๊ฐ ๋งค์ฐ ์ ํฉํฉ๋๋ค. ํ์ฅ์ค์ ์๊ณ ์์ญ์ด๊ณ ์ด์ ๋ ์ ๊ธ์ ๋๋ค. ๋ง์ ์ฌ๋(์ค๋ ๋)์ด ์ธ๋ถ์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ์ ์์ง๋ง ์ด์ ๋ฅผ ๊ฐ์ง ์ฌ๋๋ง ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ์๋ฃ๋๋ฉด ๋๊ฐ์ ์ด์ ๋ฅผ ๋ฐํํ์ฌ ์ค์ ์ ์๋ ๋ค์ ์ฌ๋์ด ์ด์ ๋ฅผ ๊ฐ์ ธ๊ฐ ๋ค์ด๊ฐ ์ ์๋๋ก ํฉ๋๋ค.
์ ๊ธ์ ๋ ๊ฐ์ง ๊ธฐ๋ณธ ์์ ์ ์ง์ํฉ๋๋ค.
- ํ๋(๋๋ ์ ๊ธ): ์ค๋ ๋๋ ์๊ณ ์์ญ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์ด ์์ ์ ํธ์ถํฉ๋๋ค. ์ ๊ธ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ค๋ ๋๋ ์ ๊ธ์ ํ๋ํ๊ณ ์งํํฉ๋๋ค. ์ ๊ธ์ด ์ด๋ฏธ ๋ค๋ฅธ ์ค๋ ๋์ ์ํด ์ ์ง๋๊ณ ์๋ ๊ฒฝ์ฐ ํธ์ถ ์ค๋ ๋๋ ์ ๊ธ์ด ํด์ ๋ ๋๊น์ง ์ฐจ๋จ(๋๋ "์ ์ ")๋ฉ๋๋ค.
- ํด์ (๋๋ ์ ๊ธ ํด์ ): ์ค๋ ๋๋ ์๊ณ ์์ญ ์คํ์ ๋ง์น ํ ์ด ์์ ์ ํธ์ถํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ๋๊ธฐ ์ค๋ ๋๊ฐ ํ๋ํ ์ ์๋๋ก ์ ๊ธ์ด ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋๋ค.
์ ๊ธ์ผ๋ก ์ํ ๊ณ์ข ๋ก์ง์ ๋ํํ๋ฉด ์ ํ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
acquire_lock(account_lock);
// --- ์๊ณ ์์ญ ์์ ---
balance = read_balance();
new_balance = balance + amount;
write_balance(new_balance);
// --- ์๊ณ ์์ญ ์ข
๋ฃ ---
release_lock(account_lock);
์ด์ ์ค๋ ๋ A๊ฐ ๋จผ์ ์ ๊ธ์ ํ๋ํ๋ฉด ์ค๋ ๋ B๋ ์ค๋ ๋ A๊ฐ ์ธ ๋จ๊ณ๋ฅผ ๋ชจ๋ ์๋ฃํ๊ณ ์ ๊ธ์ ํด์ ํ ๋๊น์ง ๊ฐ์ ๋ก ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ์์ ์ด ๋ ์ด์ ์ธํฐ๋ฆฌ๋น๋์ง ์๊ณ ๊ฒฝ์ ์กฐ๊ฑด์ด ์ ๊ฑฐ๋ฉ๋๋ค.
์ ๊ธ ์ ํ: ํ๋ก๊ทธ๋๋จธ์ ๋๊ตฌ ํคํธ
์ ๊ธ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๊ฐ๋จํ์ง๋ง ๋ค์ํ ์๋๋ฆฌ์ค์๋ ๋ค์ํ ์ ํ์ ์ ๊ธ ๋ฉ์ปค๋์ฆ์ด ํ์ํฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์ ๊ธ ๋๊ตฌ ํคํธ๋ฅผ ์ดํดํ๋ ๊ฒ์ ํจ์จ์ ์ด๊ณ ์ฌ๋ฐ๋ฅธ ๋์ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๋ฎคํ ์ค(์ํธ ๋ฐฐ์ ) ์ ๊ธ
๋ฎคํ ์ค๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ผ๋ฐ์ ์ธ ์ ํ์ ์ ๊ธ์ ๋๋ค. ์ ๊น ๋๋ ์ ๊ธ ํด์ ์ ๋ ๊ฐ์ง ์ํ๋ง ์๋ ์ด์ง ์ ๊ธ์ ๋๋ค. ์๊ฒฉํ ์ํธ ๋ฐฐ์ ๋ฅผ ์ํํ๋๋ก ์ค๊ณ๋์ด ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ธ์ ์์ ํ ์ ์์ต๋๋ค.
- ์์ ๊ถ: ๋๋ถ๋ถ์ ๋ฎคํ ์ค ๊ตฌํ์ ํต์ฌ ํน์ง์ ์์ ๊ถ์ ๋๋ค. ๋ฎคํ ์ค๋ฅผ ํ๋ํ ์ค๋ ๋๋ง ๋ฎคํ ์ค๋ฅผ ํด์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค๋ ๋์์ ์ฌ์ฉ ์ค์ธ ์๊ณ ์์ญ์ ์ ๊ธ์ ์ค์๋ก(๋๋ ์ ์์ ์ผ๋ก) ํด์ ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ ์ฌ๋ก: ๋ฎคํ ์ค๋ ๊ณต์ ๋ณ์ ์ ๋ฐ์ดํธ ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๊ณผ ๊ฐ์ด ์งง๊ณ ๊ฐ๋จํ ์๊ณ ์์ญ์ ๋ณดํธํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ ํ์ ๋๋ค.
์ธ๋งํฌ์ด
์ธ๋งํฌ์ด๋ ๋ค๋๋๋ ์ปดํจํฐ ๊ณผํ์ Edsger W. Dijkstra๊ฐ ๋ฐ๋ช ํ ๋ณด๋ค ์ผ๋ฐํ๋ ๋๊ธฐํ ๊ธฐ๋ณธ ์์์ ๋๋ค. ๋ฎคํ ์ค์ ๋ฌ๋ฆฌ ์ธ๋งํฌ์ด๋ ์์๊ฐ ์๋ ์ ์ ๊ฐ์ ์นด์ดํฐ๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค.
๋ ๊ฐ์ง ์์์ ์ฐ์ฐ์ ์ง์ํฉ๋๋ค.
- wait() (๋๋ P ์ฐ์ฐ): ์ธ๋งํฌ์ด์ ์นด์ดํฐ๋ฅผ ๊ฐ์์ํต๋๋ค. ์นด์ดํฐ๊ฐ ์์๊ฐ ๋๋ฉด ์นด์ดํฐ๊ฐ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋๊น์ง ์ค๋ ๋๊ฐ ์ฐจ๋จ๋ฉ๋๋ค.
- signal() (๋๋ V ์ฐ์ฐ): ์ธ๋งํฌ์ด์ ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ์ธ๋งํฌ์ด์์ ์ฐจ๋จ๋ ์ค๋ ๋๊ฐ ์๋ ๊ฒฝ์ฐ ๊ทธ ์ค ํ๋๊ฐ ์ฐจ๋จ ํด์ ๋ฉ๋๋ค.
์ธ๋งํฌ์ด์๋ ๋ ๊ฐ์ง ์ฃผ์ ์ ํ์ด ์์ต๋๋ค.
- ์ด์ง ์ธ๋งํฌ์ด: ์นด์ดํฐ๋ 1๋ก ์ด๊ธฐํ๋ฉ๋๋ค. 0 ๋๋ 1์ผ ์๋ง ์์ผ๋ฏ๋ก ๊ธฐ๋ฅ์ ์ผ๋ก ๋ฎคํ ์ค์ ๋์ผํฉ๋๋ค.
- ๊ณ์ฐ ์ธ๋งํฌ์ด: ์นด์ดํฐ๋ ์ ์ N > 1๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ต๋ N๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ ํํ ๋ฆฌ์์ค ํ์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์: ์ต๋ 10๊ฐ์ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ฒ๋ฆฌํ ์ ์๋ ์ฐ๊ฒฐ ํ์ด ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํด ๋ณด์ญ์์ค. 10์ผ๋ก ์ด๊ธฐํ๋ ๊ณ์ฐ ์ธ๋งํฌ์ด๋ ์ด๋ฅผ ์๋ฒฝํ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ ์ค๋ ๋๋ ์ฐ๊ฒฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ ์ ์ธ๋งํฌ์ด์์ `wait()`๋ฅผ ์ํํด์ผ ํฉ๋๋ค. 11๋ฒ์งธ ์ค๋ ๋๋ ์ฒ์ 10๊ฐ์ ์ค๋ ๋ ์ค ํ๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์๋ฃํ๊ณ ์ธ๋งํฌ์ด์์ `signal()`์ ์ํํ์ฌ ์ฐ๊ฒฐ์ ํ๋ก ๋ฐํํ ๋๊น์ง ์ฐจ๋จ๋ฉ๋๋ค.
์ฝ๊ธฐ-์ฐ๊ธฐ ์ ๊ธ(๊ณต์ /๋ฐฐํ์ ์ ๊ธ)
๋์ ์์คํ ์ ์ผ๋ฐ์ ์ธ ํจํด์ ๋ฐ์ดํฐ๊ฐ ์ฐ์ฌ์ง๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์์ฃผ ์ฝํ์ง๋ค๋ ๊ฒ์ ๋๋ค. ์ด ์๋๋ฆฌ์ค์์ ๊ฐ๋จํ ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋นํจ์จ์ ์ ๋๋ค. ์ฝ๊ธฐ๊ฐ ์์ ํ๊ณ ์์ ํ์ง ์๋ ์์ ์์๋ ๋ถ๊ตฌํ๊ณ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฝ๊ธฐ-์ฐ๊ธฐ ์ ๊ธ์ ๋ ๊ฐ์ง ์ ๊ธ ๋ชจ๋๋ฅผ ์ ๊ณตํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
- ๊ณต์ (์ฝ๊ธฐ) ์ ๊ธ: ์ฐ๊ธฐ ์ ๊ธ์ ๋ณด์ ํ ์ค๋ ๋๊ฐ ์๋ ํ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ฝ๊ธฐ ์ ๊ธ์ ํ๋ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋์ ๋์์ฑ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฐฐํ์ (์ฐ๊ธฐ) ์ ๊ธ: ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ฐ๊ธฐ ์ ๊ธ์ ํ๋ํ ์ ์์ต๋๋ค. ์ค๋ ๋๊ฐ ์ฐ๊ธฐ ์ ๊ธ์ ๋ณด์ ํ๋ฉด ๋ค๋ฅธ ๋ชจ๋ ์ค๋ ๋(์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ๋ชจ๋)๊ฐ ์ฐจ๋จ๋ฉ๋๋ค.
๋น์ ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌธ์์ ๋๋ค. ๋ง์ ์ฌ๋์ด ๋์์ ๋ฌธ์ ์ฌ๋ณธ์ ์ฝ์ ์ ์์ต๋๋ค(๊ณต์ ์ฝ๊ธฐ ์ ๊ธ). ๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ ๋ฌธ์๋ฅผ ํธ์งํ๋ ค๋ฉด ๋ฐฐํ์ ์ผ๋ก ํ์ธํด์ผ ํ๋ฉฐ ์๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ์ฌ๋์ ์ฝ๊ฑฐ๋ ํธ์งํ ์ ์์ต๋๋ค(๋ฐฐํ์ ์ฐ๊ธฐ ์ ๊ธ).
์ฌ๊ท ์ ๊ธ(์ฌ์ง์ ์ ๊ธ)
์ด๋ฏธ ๋ฎคํ ์ค๋ฅผ ๋ณด์ ํ๊ณ ์๋ ์ค๋ ๋๊ฐ ๋ค์ ํ๋ํ๋ ค๊ณ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ํ์ค ๋ฎคํ ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฆ์ ๊ต์ฐฉ ์ํ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ค๋ ๋๋ ์ ๊ธ์ ํด์ ํ ๋๊น์ง ์์ํ ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ฌ๊ท ์ ๊ธ(๋๋ ์ฌ์ง์ ์ ๊ธ)์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ฌ๊ท ์ ๊ธ์ ์ฌ์ฉํ๋ฉด ๋์ผํ ์ค๋ ๋๊ฐ ๋์ผํ ์ ๊ธ์ ์ฌ๋ฌ ๋ฒ ํ๋ํ ์ ์์ต๋๋ค. ๋ด๋ถ ์์ ๊ถ ์นด์ดํฐ๋ฅผ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ์ ๊ธ์ ์์ ํ ์ค๋ ๋๊ฐ `acquire()`๋ฅผ ํธ์ถํ ํ์์ ๋์ผํ ํ์๋ก `release()`๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ์๋ง ์ ๊ธ์ด ์์ ํ ํด์ ๋ฉ๋๋ค. ์ด๋ ์คํ ์ค์ ๊ณต์ ๋ฆฌ์์ค๋ฅผ ๋ณดํธํด์ผ ํ๋ ์ฌ๊ท ํจ์์์ ํนํ ์ ์ฉํฉ๋๋ค.
์ ๊ธ์ ์ํ: ์ผ๋ฐ์ ์ธ ํจ์
์ ๊ธ์ ๊ฐ๋ ฅํ์ง๋ง ์๋ ์ ๊ฒ์ ๋๋ค. ์ ๊ธ์ ๋ถ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ ๊ฒฝ์ ์กฐ๊ฑด๋ณด๋ค ์ง๋จํ๊ณ ์์ ํ๊ธฐ ํจ์ฌ ๋ ์ด๋ ค์ด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๊ต์ฐฉ ์ํ, ํ์ฑ ์ ๊ธ ๋ฐ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด ํฌํจ๋ฉ๋๋ค.
๊ต์ฐฉ ์ํ
๊ต์ฐฉ ์ํ๋ ๋์ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ๋๋ ค์ํ๋ ์๋๋ฆฌ์ค์ ๋๋ค. ๋ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ๋ฌด๊ธฐํ์ผ๋ก ์ฐจ๋จ๋์ด ๋์ผํ ์งํฉ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๋ ๋ฐ์ํฉ๋๋ค.
๋ ๊ฐ์ ์ค๋ ๋(์ค๋ ๋ 1, ์ค๋ ๋ 2)์ ๋ ๊ฐ์ ์ ๊ธ(์ ๊ธ A, ์ ๊ธ B)์ด ์๋ ๊ฐ๋จํ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
- ์ค๋ ๋ 1์ด ์ ๊ธ A๋ฅผ ํ๋ํฉ๋๋ค.
- ์ค๋ ๋ 2๊ฐ ์ ๊ธ B๋ฅผ ํ๋ํฉ๋๋ค.
- ์ด์ ์ค๋ ๋ 1์ด ์ ๊ธ B๋ฅผ ํ๋ํ๋ ค๊ณ ํ์ง๋ง ์ค๋ ๋ 2๊ฐ ๋ณด์ ํ๊ณ ์์ผ๋ฏ๋ก ์ค๋ ๋ 1์ด ์ฐจ๋จ๋ฉ๋๋ค.
- ์ด์ ์ค๋ ๋ 2๊ฐ ์ ๊ธ A๋ฅผ ํ๋ํ๋ ค๊ณ ํ์ง๋ง ์ค๋ ๋ 1์ด ๋ณด์ ํ๊ณ ์์ผ๋ฏ๋ก ์ค๋ ๋ 2๊ฐ ์ฐจ๋จ๋ฉ๋๋ค.
์ด์ ๋ ์ค๋ ๋๊ฐ ๋ชจ๋ ์๊ตฌ ๋๊ธฐ ์ํ์ ๊ฐํ์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค๋จ๋ฉ๋๋ค. ์ด ์ํฉ์ ๋ค ๊ฐ์ง ํ์ ์กฐ๊ฑด(Coffman ์กฐ๊ฑด)์ ์กด์ฌ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
- ์ํธ ๋ฐฐ์ : ๋ฆฌ์์ค(์ ๊ธ)๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
- ๋ณด๋ฅ ๋ฐ ๋๊ธฐ: ์ค๋ ๋๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ํ๋ ์ด์์ ๋ฆฌ์์ค๋ฅผ ๋ณด์ ํฉ๋๋ค.
- ์ ์ ๋ถ๊ฐ: ๋ฆฌ์์ค๋ฅผ ๋ณด์ ํ ์ค๋ ๋์์ ๊ฐ์ ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- ์ํ ๋๊ธฐ: ๋ ๊ฐ ์ด์์ ์ค๋ ๋ ์ฒด์ธ์ด ์กด์ฌํ๋ฉฐ ๊ฐ ์ค๋ ๋๋ ์ฒด์ธ์ ๋ค์ ์ค๋ ๋๊ฐ ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค.
๊ต์ฐฉ ์ํ๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ด๋ฌํ ์กฐ๊ฑด ์ค ํ๋ ์ด์์ ๊นจ์ผ ํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ๋ต์ ์ ๊ธ ํ๋์ ๋ํ ์๊ฒฉํ ๊ธ๋ก๋ฒ ์์๋ฅผ ์ํํ์ฌ ์ํ ๋๊ธฐ ์กฐ๊ฑด์ ๊นจ๋ ๊ฒ์ ๋๋ค.
ํ์ฑ ์ ๊ธ
ํ์ฑ ์ ๊ธ์ ๊ต์ฐฉ ์ํ์ ๋ฏธ๋ฌํ ์ฌ์ด์ ๋๋ค. ํ์ฑ ์ ๊ธ์์๋ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋์ง ์์ต๋๋ค. ํ๋ฐํ๊ฒ ์คํ๋์ง๋ง ์๋ฌด๋ฐ ์ง์ ๋ ์ด๋ฃจ์ง ๋ชปํฉ๋๋ค. ์ ์ฉํ ์์ ์ ์ํํ์ง ์๊ณ ์๋ก์ ์ํ ๋ณํ์ ์๋ตํ๋ ๋ฃจํ์ ๊ฐํ ์์ต๋๋ค.
๊ณ ์ ์ ์ธ ๋น์ ๋ ์ข์ ๋ณต๋์์ ์๋ก ์ง๋๊ฐ๋ ค๊ณ ํ๋ ๋ ์ฌ๋์ ๋๋ค. ๊ทธ๋ค์ ๋ชจ๋ ์์ ๋ฐ๋ฅด๊ฒ ํ๋ํ๊ณ ์ผ์ชฝ์ผ๋ก ๋ฐ์ ๋ด๋์ผ๋ ค๊ณ ํ์ง๋ง ๊ฒฐ๊ตญ ์๋ก๋ฅผ ๋ง์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ ๋ค ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ ๋ด๋์ด ๋ค์ ์๋ก๋ฅผ ๋ง์ต๋๋ค. ๊ทธ๋ค์ ํ๋ฐํ๊ฒ ์์ง์ด์ง๋ง ๋ณต๋๋ฅผ ๋ฐ๋ผ ์งํํ์ง ๋ชปํฉ๋๋ค. ์ํํธ์จ์ด์์๋ ์ค๋ ๋๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ฌผ๋ฌ์์ ์ฌ์๋ํ์ง๋ง ๋ค์ ์ถฉ๋ํ๋ ์๋ชป ์ค๊ณ๋ ๊ต์ฐฉ ์ํ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์์ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ธฐ์
๊ธฐ์๋ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋๋๋ผ๋ ์ค๋ ๋๊ฐ ํ์ํ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ์ด ์๊ตฌ์ ์ผ๋ก ๊ฑฐ๋ถ๋ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ "๊ณต์ ํ์ง ์์" ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ์์คํ ์์ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ๊ธ ๋ฉ์ปค๋์ฆ์ด ํญ์ ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋์ ๊ฒฝ์์๊ฐ ๋์์์ด ์คํธ๋ฆฌ๋ฐ๋๋ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ค๋ ๋๋ ์คํํ ๊ธฐํ๋ฅผ ์ป์ง ๋ชปํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ์ค๋ฒํค๋
์ ๊ธ์ ๋ฌด๋ฃ๊ฐ ์๋๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค.
- ํ๋/ํด์ ๋น์ฉ: ์ ๊ธ์ ํ๋ํ๊ณ ํด์ ํ๋ ์์ ์๋ ์ผ๋ฐ ๋ช ๋ น์ด๋ณด๋ค ๊ณ์ฐ ๋น์ฉ์ด ๋ ๋ง์ด ๋๋ ์์์ ์ฐ์ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํ์ค๊ฐ ํฌํจ๋ฉ๋๋ค.
- ๊ฒฝ์: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์ผํ ์ ๊ธ์ ๋๊ณ ์์ฃผ ๊ฒฝ์ํ๋ ๊ฒฝ์ฐ ์์คํ ์ ์์ฐ์ ์ธ ์์ ์ ์ํํ๋ ๋์ ์ปจํ ์คํธ ์ ํ ๋ฐ ์ค๋ ๋ ์ค์ผ์ค๋ง์ ์๋นํ ์๊ฐ์ ์๋นํฉ๋๋ค. ๋์ ๊ฒฝ์์ ์คํ์ ํจ๊ณผ์ ์ผ๋ก ์ง๋ ฌํํ์ฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๋ชฉ์ ์ ๋ฌด๋๋จ๋ฆฝ๋๋ค.
์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ ๊ธ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅด๊ณ ํจ์จ์ ์ธ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ๊ท์จ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก ์งํฉ์ ์ค์ํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์์น์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๋ซํผ์ ๊ด๊ณ์์ด ๋ณดํธ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
1. ์๊ณ ์์ญ์ ์๊ฒ ์ ์ง
์ ๊ธ์ ๊ฐ๋ฅํ ํ ์งง์ ์๊ฐ ๋์ ์ ์ง๋์ด์ผ ํฉ๋๋ค. ์๊ณ ์์ญ์๋ ๋์ ์ ๊ทผ์ผ๋ก๋ถํฐ ๋ณดํธํด์ผ ํ๋ ์ฝ๋๋ง ํฌํจ๋์ด์ผ ํฉ๋๋ค. ๊ณต์ ์ํ์ ๊ด๋ จ์ด ์๋ ๋น์๊ณ ์ฐ์ฐ(I/O, ๊ณต์ ์ํ์ ๊ด๋ จ๋์ง ์์ ๋ณต์กํ ๊ณ์ฐ)์ ์ ๊ธด ์์ญ ์ธ๋ถ์์ ์ํํด์ผ ํฉ๋๋ค. ์ ๊ธ์ ์ค๋ ์ ์งํ ์๋ก ๊ฒฝ์ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ๋ ๋ง์ด ์ฐจ๋จํ๊ฒ ๋ฉ๋๋ค.
2. ์ฌ๋ฐ๋ฅธ ์ ๊ธ ์ธ๋ถ์ฑ ์ ํ
์ ๊ธ ์ธ๋ถ์ฑ์ ๋จ์ผ ์ ๊ธ์ผ๋ก ๋ณดํธ๋๋ ๋ฐ์ดํฐ์ ์์ ๋ํ๋ ๋๋ค.
- ็ฒ็ฒๅบฆ ์ ๊ธ: ํฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋๋ ์ ์ฒด ํ์ ์์คํ ์ ๋ณดํธํ๊ธฐ ์ํด ๋จ์ผ ์ ๊ธ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ตฌํํ๊ณ ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ๊ฐ๋จํ์ง๋ง ๋ฐ์ดํฐ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ๊ด๋ จ ์๋ ์์ ์ด ๋ชจ๋ ๋์ผํ ์ ๊ธ์ผ๋ก ์ง๋ ฌํ๋๋ฏ๋ก ๋์ ๊ฒฝ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ็ดฐ็ฒๅบฆ ์ ๊ธ: ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ค๋ฅธ ๋ ๋ฆฝ์ ์ธ ๋ถ๋ถ์ ๋ณดํธํ๊ธฐ ์ํด ์ฌ๋ฌ ์ ๊ธ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ฒด ํด์ ํ ์ด๋ธ์ ๋ํ ์ ๊ธ ํ๋ ๋์ ๊ฐ ๋ฒํท์ ๋ํ ๋ณ๋์ ์ ๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋ ๋ณต์กํ์ง๋ง ๋ ๋ง์ ์ง์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ทธ๋ค ์ฌ์ด์ ์ ํ์ ๋จ์์ฑ๊ณผ ์ฑ๋ฅ ๊ฐ์ ์ ์ถฉ์ ๋๋ค. ๋ ๊ฑฐ์น ์ ๊ธ์ผ๋ก ์์ํ๊ณ ์ฑ๋ฅ ํ๋กํ์ผ๋ง์์ ์ ๊ธ ๊ฒฝ์์ด ๋ณ๋ชฉ ํ์์์ ๋ณด์ฌ์ฃผ๋ ๊ฒฝ์ฐ์๋ง ๋ ๋ฏธ์ธํ ์ ๊ธ์ผ๋ก ์ด๋ํ์ญ์์ค.
3. ํญ์ ์ ๊ธ ํด์
์ ๊ธ์ ํด์ ํ์ง ๋ชปํ๋ฉด ์์คํ
์ด ์ค๋จ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์น๋ช
์ ์ธ ์ค๋ฅ์
๋๋ค. ์ด ์ค๋ฅ์ ์ผ๋ฐ์ ์ธ ์์ธ์ ์๊ณ ์์ญ ๋ด์์ ์์ธ ๋๋ ์กฐ๊ธฐ ๋ฐํ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์
๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด Java ๋๋ C#์ try...finally ๋ธ๋ก ๋๋ C++์ ๋ฒ์ ์ง์ ์ ๊ธ๊ณผ ํจ๊ป RAII(๋ฆฌ์์ค ํ๋์ด ์ด๊ธฐํ์) ํจํด๊ณผ ๊ฐ์ด ์ ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ ์ธ์ด ๊ตฌ๋ฌธ์ ํญ์ ์ฌ์ฉํ์ญ์์ค.
์(try-finally๋ฅผ ์ฌ์ฉํ๋ ์์ฌ ์ฝ๋):
my_lock.acquire();
try {
// ์์ธ๋ฅผ throwํ ์ ์๋ ์๊ณ ์์ญ ์ฝ๋
} finally {
my_lock.release(); // ์ด๊ฒ์ ์คํ์ด ๋ณด์ฅ๋ฉ๋๋ค
}
4. ์๊ฒฉํ ์ ๊ธ ์์ ๋ฐ๋ฅด๊ธฐ
๊ต์ฐฉ ์ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์ ๋ต์ ์ํ ๋๊ธฐ ์กฐ๊ฑด์ ๊นจ๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ์ ๊ธ์ ํ๋ํ๊ธฐ ์ํ ์๊ฒฉํ๊ณ ์ ์ญ์ ์ด๋ฉฐ ์์์ ์ธ ์์๋ฅผ ์ค์ ํฉ๋๋ค. ์ค๋ ๋๊ฐ ์ ๊ธ A์ ์ ๊ธ B๋ฅผ ๋ชจ๋ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ์ ๊ธ B๋ฅผ ํ๋ํ๊ธฐ ์ ์ ํญ์ ์ ๊ธ A๋ฅผ ํ๋ํด์ผ ํฉ๋๋ค. ์ด ๊ฐ๋จํ ๊ท์น์ ์ํ ๋๊ธฐ๋ฅผ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค.
5. ์ ๊ธ์ ๋ํ ๋์ ๊ณ ๋ ค
๊ธฐ๋ณธ์ ์ด์ง๋ง ์ ๊ธ์ ๋์์ฑ ์ ์ด๋ฅผ ์ํ ์ ์ผํ ์๋ฃจ์ ์ด ์๋๋๋ค. ๊ณ ์ฑ๋ฅ ์์คํ ์ ๊ฒฝ์ฐ ๊ณ ๊ธ ๊ธฐ์ ์ ํ์ํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
- ์ ๊ธ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ: ์ด๋ค์ ์ ๊ธ์ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋์ ์ ๊ทผ์ ํ์ฉํ๋ ์ ์์ค ์์์ ํ๋์จ์ด ๋ช ๋ น์ด(์: Compare-And-Swap)๋ฅผ ์ฌ์ฉํ์ฌ ์ค๊ณ๋ ์ ๊ตํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๊ธฐ๋ ๋งค์ฐ ์ด๋ ต์ง๋ง ๋์ ๊ฒฝ์์์ ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ๋ถ๋ณ ๋ฐ์ดํฐ: ๋ฐ์ดํฐ๊ฐ ์์ฑ๋ ํ ์์ ๋์ง ์์ผ๋ฉด ๋๊ธฐํํ ํ์ ์์ด ์ค๋ ๋ ๊ฐ์ ์์ ๋กญ๊ฒ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ด๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ์์น์ด๋ฉฐ ๋์ ์ค๊ณ๋ฅผ ๋จ์ํํ๋ ์ ์ ๋ ์ธ๊ธฐ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ํํธ์จ์ด ํธ๋์ญ์ ๋ฉ๋ชจ๋ฆฌ(STM): ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์์์ ํธ๋์ญ์ ์ ์ ์ํ ์ ์๋ ๋ ๋์ ์์ค์ ์ถ์ํ์ ๋๋ค. STM ์์คํ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ณต์กํ ๋๊ธฐํ ์ธ๋ถ ์ฌํญ์ ์ฒ๋ฆฌํฉ๋๋ค.
๊ฒฐ๋ก
์ ๊ธ ๊ธฐ๋ฐ ๋๊ธฐํ๋ ๋์ ํ๋ก๊ทธ๋๋ฐ์ ์ด์์ ๋๋ค. ๊ณต์ ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๊ณ ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํ๋ ๊ฐ๋ ฅํ๊ณ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๋จ์ํ ๋ฎคํ ์ค์์ ๋ณด๋ค ๋ฏธ๋ฌํ ์ฝ๊ธฐ-์ฐ๊ธฐ ์ ๊ธ์ ์ด๋ฅด๊ธฐ๊น์ง ์ด๋ฌํ ๊ธฐ๋ณธ ์์๋ ๋ฉํฐ ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ๋๊ตฌ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ํ์๋ ์ฑ ์์ด ๋ฐ๋ฆ ๋๋ค. ์ ์ฌ์ ์ธ ํจ์ (๊ต์ฐฉ ์ํ, ํ์ฑ ์ ๊ธ ๋ฐ ์ฑ๋ฅ ์ ํ)์ ๋ํ ๊น์ ์ดํด๋ ์ ํ ์ฌํญ์ด ์๋๋๋ค. ์๊ณ ์์ญ ํฌ๊ธฐ ์ต์ํ, ์ ์ ํ ์ ๊ธ ์ธ๋ถ์ฑ ์ ํ, ์๊ฒฉํ ์ ๊ธ ์์ ์ํ๊ณผ ๊ฐ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํจ์ผ๋ก์จ ์ํ์ ํผํ๋ฉด์ ๋์์ฑ์ ํ์ ํ์ฉํ ์ ์์ต๋๋ค.
๋์์ฑ ๋ง์คํฐํ๊ธฐ๋ ์ฌ์ ์ ๋๋ค. ์ ์คํ ์ค๊ณ, ์๊ฒฉํ ํ ์คํธ, ์ค๋ ๋๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋ ๋ ๋ฐ์ํ ์ ์๋ ๋ณต์กํ ์ํธ ์์ฉ์ ํญ์ ์ธ์ํ๋ ์ฌ๊ณ ๋ฐฉ์์ด ํ์ํฉ๋๋ค. ์ ๊ธ ๊ธฐ์ ์ ๋ง์คํฐํ๋ฉด ๋น ๋ฅด๊ณ ์๋ต์ฑ์ด ๋ฐ์ด๋ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ด๋ฉฐ ์ ํํ ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํ ๋จ๊ณ๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค.