๊ณต์ ๋ฒํผ๋ฅผ ์ฌ์ด์ ๋๊ณ , ๊ณต์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํ๋ ์์ฐ์๋ค๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์๋นํ๋ ์๋น์๋ค์ด ๊ณต์ ๋ฒํผ๋ฅผ ๋ฌธ์ ์์ด ์ฌ์ฉํ๋๋ก ์์ฐ์์ ์๋น์๋ฅผ ๋๊ธฐํ์ํค๋ ๋ฌธ์ ์ด๋ค.

์ ์ฌ์ง์ ๋ณด๋ฉด, ๊ณต์ ๋ฒํผ๊ฐ 3๋งํผ ์ฑ์์ก์๋ค. ์ด ์ํ์์ ์์ฐ์์ ์๋น์๊ฐ ๋์์ ์ ๊ทผํ๋ค.
์์ฐ์๊ฐ ๋จผ์ ์คํ๋์์ ๋ sum์ 4๊ฐ ๋๊ณ ๊ทธ ์ดํ ์๋น์๊ฐ ์คํ๋๋ฉด ์๋น์๊ฐ ์์ฐ์์ ๋์์ ์ฝ์ sum ๋ณ์์ ๊ฐ์ 3์ด์์ผ๋ฏ๋ก sum์ด 2๊ฐ ๋๋ค.
์ด๋ ๊ฒ ๋์์ ์ ๊ทผํ๋ ๋ฌธ์ ์์ ์คํ ์์์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค.
ํค๋ณด๋ ์ ๋ ฅ, ๋ฏธ๋์ด ํ๋ ์ด์ด, ์คํธ๋ฆฌ๋ฐ ์๋ฒ๋ ์์ฐ์-์๋น์ ๊ด๊ณ์ด๋ค.

์ํธ ๋ฐฐ์ ๋ฌธ์ - ์์ฐ์๋ค๊ณผ ์๋น์๋ค์ ๊ณต์ ๋ฒํผ์ ๋ํ ์ํธ ๋ฐฐ์
๋น์ด ์๋ ๊ณต์ ๋ฒํผ ๋ฌธ์ - ๋น์ด ์๋ ๊ณต์ ๋ฒํผ๋ฅผ ์๋น์๊ฐ ์ฝ์ผ๋ฉด ์ ๋๋ค.
๊ฝ ์ฐฌ ๊ณต์ ๋ฒํผ ๋ฌธ์ - ๊ฝ ์ฐฌ ๊ณต์ ๋ฒํผ์ ์์ฐ์๊ฐ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ฉด ์ ๋๋ค.
์ฝ๊ธฐ ๊ฐ๋ฅํ ๋ฒํผ ๊ฐฏ์๋ฅผ ํ์ธํจ์ผ๋ก์จ ๋น์ด์๋ ๋ฒํผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.

๋น์ด ์๋ ๋ฒํผ์ ๋ํ์ฌ ์๋น์๊ฐ P ์ฐ์ฐ ํ ๋ฒํผ๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ๋ฉด ์ฌ์๋ฒ๋ฆฌ๊ณ , ์์ฐ์๋ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ณ V ์ฐ์ฐ์ ์ํํ๊ณ ์๋น์๋ฅผ ๊นจ์ด๋ค.
์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ฒํผ ๊ฐฏ์๋ฅผ ํ์ธํจ์ผ๋ก์จ ๊ฝ ์ฐฌ ๋ฒํผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.

์์ฐ์๊ฐ P ์ฐ์ฐ ํ ๊ฝ ์ฐฌ ๋ฒํผ์ ๋ํด ์ฐ๋ ค๊ณ ํ๋ฉด ์ฌ์๋ฒ๋ฆฌ๊ณ , ์๋น์๋ ๋ฒํผ๋ฅผ ์ฝ๊ณ V ์ฐ์ฐ์ผ๋ก ์์ฐ์๋ฅผ ๊นจ์ด๋ค.
์ ๋ ์ธ๋งํฌ์ด๋ฅผ ๊ฐ์ง๊ณ ๋์ํ๋ ์๋น์์ ์์ฐ์๋ฅผ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํํํด๋ณด์.
Consumer {
while(true) {
P(R); // ์ธ๋งํฌ์ด R์ P/wait ์ฐ์ฐ์ ์ํํ์ฌ ๋ฒํผ๊ฐ ๋น์ด ์์ผ๋ฉด(์ฝ๊ธฐ ๊ฐ๋ฅํ ๋ฒํผ ์=0) ๋๊ธฐํ๋ค.
๋ฎคํ
์ค๋ฅผ(M)์ ์ ๊ทผ๋ค.
๊ณต์ ๋ฒํผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค. // ์๊ณ๊ตฌ์ญ ์ฝ๋
๋ฎคํ
์ค(M)์ ์ฐ๋ค.
V(W); // ์ธ๋งํฌ์ด W์ ๋ํด V/signal ์ฐ์ฐ์ ์ํํ์ฌ ๋ฒํผ๊ฐ ๋น๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ Producer๋ฅผ ๊นจ์ด๋ค.
}
}
Producer {
while(true) {
P(W); // ์ธ๋งํฌ์ด W์ P/wait ์ฐ์ฐ์ ์ํํ์ฌ ๋ฒํผ๊ฐ ๊ฝ ์ฐจ ์์ผ๋ฉด(์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ฒํผ ์=0) ๋๊ธฐ
๋ฎคํ
์ค(M)๋ฅผ ์ ๊ทผ๋ค.
๊ณต์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. // ์๊ณ๊ตฌ์ญ ์ฝ๋
๋ฎคํ
์ค(M)์ ์ฐ๋ค.
V(R); // ์ธ๋งํฌ์ด R์ ๋ํด V/signal ์ฐ์ฐ์ ์ํํ์ฌ ๋ฒํผ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ Consumer๋ฅผ ๊นจ์ด๋ค.
}
}