
๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํด์๋ ์ ๋๋ ๊ณต์ ์์(์๋ฃ ๊ตฌ์กฐ ๋๋ ์ฅ์น)์ ์ ๊ทผํ๋ ์ฝ๋์ ์ผ๋ถ
์๊ณ ๊ตฌ์ญ์ผ๋ก ์ง์ ๋์ด์ผ ํ ์ฝ๋ ์์ญ์ด ์๊ณ ๊ตฌ์ญ์ผ๋ก ์ง์ ๋์ง ์์์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์
์ํธ๋ฐฐ์ (mutual exclusion)
์๊ณ๊ตฌ์ญ์ ์ด๋ฏธ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋ค์ด๊ฐ ์ ์์
์งํ (progress)
ํ๋์ ์๊ณ๊ตฌ์ญ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ ๋, ์ด๋ค ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ์ง ๊ฒฐ์
ํ์ ๋๊ธฐ (bounded waiting)
ํ ๋ฒ ์๊ณ๊ตฌ์ญ์ ๋ค์ด๊ฐ ํ๋ก์ธ์ค๋ ๋ค์ ์๊ณ๊ตฌ์ญ ์ ๊ทผ์ ์ ํ์ด ์๊น ๊ธฐ์ ํ์ ๋ฐฉ์ง
๊ฒฝ์ ์กฐ๊ฑด์ผ๋ก ์ธํด ์ ์์ ์ธ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๊ฒ ๋๋ ๊ฒฝ์ฐ
๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๊ณตํต ์์ ๋ณํ ์ ๊ทผ ์, ์ ๊ทผ ์์์ ๋ฐ๋ผ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ์ํฉ
์ธ๋งํฌ์ด
๊ณต์ ์์์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ํ๋ก์ธ์ค์ ์ ๊ทผ์ ๋ฐฉ์ง
๋ฎคํ
์ค
๊ณต์ ์์์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ์ค๋ ๋์ ์ ๊ทผ์ ๋ฐฉ์ง
๊ฒฝ์์ํ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋์์ฑ ์ ์ด ๊ธฐ๋ฒ
์ํธ๋ฐฐ์ ๋ณด์ฅ
| ์ธ๋งํฌ์ด | ๋ฎคํ ์ค | |
|---|---|---|
| ๋๊ธฐํ ์ | 1๊ฐ ์ด์ | ์ค์ง 1๊ฐ |
| ์์ ์์ ๋ฐ ์ฑ ์ | NO | YES |
| ํด์ ๊ฐ ๊ฐ๋ฅํ ์ค๋ ๋ | ์์ ํ์ง ์์ ์ค๋ ๋ | ์์ ์ค์ธ ์ค๋ ๋ ๋ณธ์ธ |
| ๋ฒ์ | ์์คํ ๋ฒ์ | ํ๋ก์ธ์ค ๋ฒ์ |
๊ณต์ ์์์ ๋ฐ์ดํฐ / ์๊ณ์์ญ ์
2๊ฐ ์ด์์ ํ๋ก์ธ์ค / ์ค๋ ๋ ์ ์ ๊ทผ์ ๋ฐฉ์ง
์์คํ ๋ฒ์ : ์์คํ ์์ ํ์ผ๋ก ์กด์ฌ

๊ณต์ ์์์ ๋ฐ์ดํฐ / ์๊ณ์์ญ ์
๋ค๋ฅธ ํ๋ก์ธ์ค / ์ค๋ ๋ ์ ์ ๊ทผ์ ๋ฐฉ์ง
ํ๋์ ์ค๋ ๋๊ฐ ์์์ ์์ , ์ฑ
์์ ๊ฐ์ง
์์ ํ ์ค๋ ๋๋ง์ด ๋ณธ์ธ์ ์์ ๋ฅผ ํด์ ํ ์ ์์
ํ๋ก์ธ์ค ๋ฒ์ : ํ๋ก์ธ์ค ์ข ๋ฃ ์ ์ฌ๋ผ์ง
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด ์ ์ ์ฌ (๋ฝ์ ์ฑ
์ ์ฐจ์ด)

ํ๋ก์ธ์ค ๊ฐ ํต์
Inter-Process Communication
ํ๋ก์ธ์ค๊ฐ์ ๋ฐ์ดํฐ ํต์ ๋ฐ ๋ฐฉ์
์ต๋ช
PIPE
FIFO
2๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ฐ๊ฒฐ
1๊ฐ์ ํ๋ก์ธ์ค๋ ์ฝ๊ธฐ
1๊ฐ์ ํ๋ก์ธ์ค๋ ์ฐ๊ธฐ
๋ถ๋ชจ ์์ ๊ฐ์ ๋จ๋ฐฉํฅ ํต์ ์ ์ฃผ๋ก ์ฌ์ฉ
Half-Duplex(๋ฐ์ด์ค) ํต์ ์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ
์ฝ๊ธฐ ์ข ๋ฃ ์ ์ ์ฐ๊ธฐ๋ฅผ ์ํํ ์ ์์
์ ์ด์ค ํต์ ๊ตฌํ ์ 2๊ฐ์ PIPE ํ์ (์ถฉ๋ ์ํ)์ต๋ช
PIPE์ ํ์ฅ
FIFO
์ฌ์ฉํ PIPE๋ฅผ ๋ช
๋ช
์ด๋ฆ์ด ์๋ ํ์ผ์ ๋งค๊ฐ์ฒด๋ก ์ฌ์ฉ
-> ๋ชจ๋ ํ๋ก์ธ์ค๋ค ์ฌ์ด์์ ํต์ ์ด ๊ฐ๋ฅ
์ ์ด์ค ํต์ ๊ตฌํ ์ 2๊ฐ์ PIPE ํ์ (์ถฉ๋ ์ํ)FIFO
์ปค๋ ์์ญ
๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด (MOM)
PIPE๋ ๋ฐ์ดํฐ์ ํ๋ฆ,
Message Queue๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ (๋ฒํผ)
๋ฐ์ดํฐ์ ๋ฒํธ๋ฅผ ๋ถ์์ผ๋ก์จ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผ ๊ฐ๋ฅ
์ผ๋์ผ ํต์ : ๊ฐ ๋ฉ์์ง๋ ํ๋์ ์๋น์์๊ฒ ํ ๋ฒ์ฉ ์ฌ์ฉ๋จ
๋น๋๊ธฐ : ํ์ ๋ฃ์ด๋ ํ ๋์ค์ ์ฒ๋ฆฌ ๊ฐ๋ฅ๊ฐ์ ๋๋ฉ์ธ ๋ด์์ ๋คํธ์ํฌ๋ฅผ ํตํ ํต์
Full-Duplex(์ ์ด์ค) ํต์
์๋ฒ-ํด๋ผ์ด์ธํธ ๊ฐ์ ์ฐ๊ฒฐ์ ํญ์ ์ ์งํด์ผ ํจ
์ง๊ธ๊น์ง ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์๋ค๋ฉด
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ฒด๋ฅผ ํจ๊ป ์ฌ์ฉ
ํ๋ก์ธ์ค๊ฐ ์ปค๋์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ฒญ
์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ด ์๋๊ธฐ ๋๋ฌธ๊ณต์ ์์์ ๋ํด
์ฌ๋ฌ ์ค๋ ๋์ ์ ๊ทผ์ด
ํ๋ก๊ทธ๋จ ์คํ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ
Mutual Exclusion
์ธ๋งํฌ์ด / ๋ฎคํ ์ค ๋ฑ์ผ๋ก ๋ฝ์ ํต์
Atomic Operation
๋ ์ด์ ์ชผ๊ฐค ์ ์๋ ์ฐ์ฐ
์ค๋จ๋์ง ์๋ ์ฐ์ฐ
์ฃผ๋ก CPU์ ๋ช
๋ น์ด๋ฅผ ์ง์ ์ฌ์ฉ
Thread-Local Storage
๊ณต์ ์์์ ์๋ฅผ ์ค์ด๊ณ ์ค๋ ๋ ๊ฐ๊ฐ์ ์ ์ฅ์๋ฅผ ์ฌ์ฉ
: ์ ์ญ๋ณ์๋ฅผ ์ง์
Re-Entrancy
ํ๋์ ์ค๋ ๋๊ฐ ์คํ ์ค์ธ ํจ์๋ฅผ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํํ๋๋ผ๋ ๊ฐ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ณ์์ผ ํจ
์๊ณ๊ตฌ์ญ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ 3๊ฐ์ง ๋ชจ๋ ์ถฉ์กฑ
๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ํ์ธํด๊ฐ๋ฉฐ ํ์ฌ ์์ ์ ์งํ ๋๋ ๋๊ธฐ
๊ณต์ ๋ณ์
boolean wannaSleep = false;
boolean wannaWork = true;
final int SLEEP = 0;
final int WORK = 1;
int TimeTo = WORK;
์ ์ ์ฌ์ฐ๊ณ ์ถ์ ํ๋ก์ธ์ค
wannaSleep = true;
TimeTo = SLEEP;
while(wannaWork && TimeTo==SLEEP);
//
// ์๊ณ๊ตฌ์ญ
//
wannaSleep = false;
์ผ์ ์ํค๊ณ ์ถ์ ํ๋ก์ธ์ค
wannaWork = true;
TimeTo = WORK;
while(wannaSleep && TimeTo==WORK);
//
// ์๊ณ๊ตฌ์ญ
//
wannaWork = false;
์๊ณ๊ตฌ์ญ ์ข ๋ฃ ์ด์ ์ ์ปจํ ์คํธ ์ค์์นญ ๋ฐ์ ์ ์ํ์ง ์์ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ฌ ์ ์์
๋๊ธฐ๋ฅผ ์ํ while๋ฌธ์ ๋ฃจํ๊ฐ ์๋ฌด๋ฐ ๋์์ ํ์ง ์์์๋
CPU ์์์ ์ฌ์ฉํ๋ค : Busy waiting
3๊ฐ ์ด์์ ํ๋ก์ธ์ค์์ Busy waiting์ ๋์ฑ ์ฌํด์ง๋ค
ํ๋ก์ธ์ค๊ฐ ๋ง์์ง์๋ก ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋๊ฒ ๋ ๊ฒ