๐ก ์ด ๊ธ์ ํ์ฌ ์ธํด ๊ธฐ๊ฐ์ ์คํฐ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค!
์ฌ๋ฌ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌ๋ Race Condition์ ๋ํ ์ค๋ช
์ ๋์๊ฒ ์ถ์์ ์ผ๋ก ๋๊ปด์ก๋ค.
๊ณ ๋ฏผ ๋์ ๋ด๊ฐ ๋ด๋ฆฐ Thread Safety์ ์ ์๋ ์ฌ์ฉ์ ์
์ฅ์์ ์ด์ ๋์์ ํ์ง ์๋ ๊ฒ์ด๋ค.
๊ฐ๋ฐ์ ํ ๋ ์ด์ ๋์์ ํ์ง ์๊ฒ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ ๋น์ฐํ๋ค.
์ด ๋น์ฐํ ๊ฒ ๋๋ฌธ์ Thread Safety๋ผ๋ ๋จ์ด๊น์ง ๋ง๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฝ๊ฒ ํด๊ฒฐ๋์ง ์๋ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ๋ง๋ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ค์ด ์ค์์ฑ์ ๊ฐ์กฐํ๊ธฐ ์ํด ๋ง๋ ๊ฒ์ด ์๋๊น ์๊ฐํ๋ค.
๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํ๋์ ์์์ ์ ๊ทผํ ์ ์๋ค.
์ฌ๋ฌ ์ค๋ ๋๊ฐ ํ๋์ ์์์ ์ ๊ทผํ ๋, ์คํ ์์์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ๋ฌธ์ ์ํฉ์ด๋ค.
์ด๋ฐ ์ํฉ์ '๊ฒฝํฉ ์ํ'์ ๋น ์ก๋ค๊ณ ๋ถ๋ฅธ๋ค.
๋ ์ค๋ ๋๊ฐ ํ๋์ ์์์ ๋๊ณ Raceํ๋ ๊ฒ ๊ฐ๋ค๊ณ ํด์ ๋ถ์ฌ์ง ์ด๋ฆ์ด๋ค.
์ด๋ป๊ฒ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น?
ํด๊ฒฐ ๋ฐฉ์ ์ค ํ๋๋ Mutex๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
Mutex๋ Lock์ด๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ๋ค.
๊ฐ ์ค๋ ๋๋ ๊ณต์ ์์์ ์ ๊ทผํ๊ธฐ ์ ์ Lock์ ๊ฑธ์ด์ผ ํ๋ค.
Lock์ด ๊ฑธ๋ฆฐ ๊ณต์ ์์์ ํด๋น ์ค๋ ๋๊ฐ ์์
์ ๋๋ด๊ณ Lock์ ํ๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
๋จผ์ ์ ๊ทผํ ์ค๋ ๋๊ฐ Lock์ ๊ฑฐ๋ ์ํฉ์ ๊ณต์ ์์์ ์ ์ ํ๋ค๊ณ ํํํ๋ค.
๋ค๋ฅธ ์ค๋ ๋๋ ๋จผ์ Lock์ ์ํํ ์ค๋ ๋๊ฐ ์์
์ ๋๋ผ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ Lock์ด ํด์ ๋๋ฉด ๊ณต์ ์์์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
๊ณต์ ์์์ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผํ๋๋ก ์ ์ดํด Race Condition ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๊ทธ๋ฌ๋ฉด Mutex๋ง ์ฐ๋ฉด Thread Safety๋ ๊ฑฑ์ ํ ํ์๊ฐ ์์๊น?
Mutex๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋๋ฝ(Deadlock) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
A์ B, 2๊ฐ์ ๊ณต์ ์์์ด ์๋ค๊ณ ๊ฐ์ ํ์.
2๊ฐ์ ๊ณต์ ์์์ ๋ชจ๋ ์ ๊ทผํด์ผ ํ๋ ์์
์ ํ๋ ๋ ์ค๋ ๋๊ฐ ์๋ค.
ํ ์ค๋ ๋๋ ๊ณต์ ์์A์ ์ ๊ทผํ ์ํ์์, ๊ณต์ ์์B์ ์ ๊ทผํ๊ณ ์ ํ๋ค.
๋ ๋ค๋ฅธ ์ค๋ ๋๋ ๊ณต์ ์์ B์ ์ ๊ทผํ ์ํ์์, ๊ณต์ ์์A์ ์ ๊ทผํ๊ณ ์ ํ๋ค.
๊ฐ ์ค๋ ๋๋ 2๋ฒ์งธ ์ ๊ทผํ๋ ค๋ ๊ณต์ ์์์ Lock์ด ๊ฑธ๋ ค์๊ธฐ ๋๋ฌธ์ Lock์ด ํ๋ฆด ๋๊น์ง ๋๊ธฐํ๊ฒ ๋๋ค.
๋ ์ค๋ ๋๋ ํ๋์ ์์์ ์ ์ ํ๊ณ ๋ฐ๋ํธ ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ฌดํ์ ๋๊ธฐํ๊ฒ ๋๋ค.
๋ฐ๋๋ฝ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น?
2๋ฒ์งธ ๊ณต์ ์์์ ์ ๊ทผ์ ์คํจํ์ ๋, 1๋ฒ์งธ ๊ณต์ ์์์ Lock์ ํด์ ํ๋ค.
๊ทธ๋ฌ๋ฉด ๊ธฐ๋ค๋ฆฌ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์์
์ ๋ง๋ฌด๋ฆฌํ ์ ์๊ฒ ๋๊ณ , ์์ ์ ๋ค์ ์ฒ์๋ถํฐ ์์
์ ์ํํ๋ฉด ๋๋ค.
์ด์ ์ ๋ง Thread Safety๊ฐ ์ง์ผ์ก์๊น?
์์์ ํด์ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํด๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ด์ ๋์์ด ๋ฐ์ํ ์ ์๋ค.
๋ผ์ด๋ธ๋ฝ(Livelock)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์ํฉ์ด๋ค.
์์์ ์ค๋ช ํ ๋ฐฉ๋ฒ๋๋ก ์ ๊ทผํ๋ ค๋ ๊ณต์ ์์์ Lock์ด ๊ฑธ๋ ค ์๋ ๊ฒฝ์ฐ, ๋จผ์ ์ ์ ํ๊ณ ์๋ ๊ณต์ ์์์ ํด์ ํ๊ฒ๋ ์ค๋ ๋ ๋์์ ๊ตฌํํด๋์๋ค๊ณ ๊ฐ์ ํ์.
๋ง์ฝ ๋ ์ค๋ ๋๊ฐ ๋์์ ๋์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
๊ฐ ์ค๋ ๋๋ ์ฒซ๋ฒ์งธ ๊ณต์ ์์์ ์ ์ ํ๊ณ ๋๋ฒ์งธ ๊ณต์ ์์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ค.
ํ์ง๋ง ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋๋ฒ์งธ ๊ณต์ ์์์ ์ด๋ฏธ ์ ์ ํ๊ณ ์์ด์ ์ฒซ๋ฒ์งธ ๊ณต์ ์์์ Lock์ ํด์ ํ๊ณ ์์
์ ์ฒ์๋ถํฐ ๋ค์ ์ํํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์ํฉ์ด ๋ฐ๋ณต๋๋ค.
๋ ์ค๋ ๋๋ ์ด์ฌํ ๊ณต์ ์์์ Lock์ ๊ฑธ์๋ค๊ฐ ํด์ ํ๋ค๊ฐ ํ์ง๋ง ์ ์ ํ์ํ ์์ ์ ์ํํ์ง ๋ชปํ๊ฒ ๋๋ค.
์ด ๋ฌธ์ ๋ ๋ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ๋ ๊น?
๊ฐ ์ค๋ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด๋ณด์.
๊ฐ ์ค๋ ๋ ์์
์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํด์ ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋๋ ๋ฎ์ ์ค๋ ๋๊ฐ ์ ์ ํ ๊ณต์ ์์์ ํด์ ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ , ์ฐ์ ์์๊ฐ ๋ฎ์ ์ค๋ ๋๋ ์ฆ์ ๊ณต์ ์์์ ํด์ ํ๊ฒ๋ ํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ด์ ์ ๋ง Thread Safeํ ๊น?
ํ๊ธ๋ก ๋ฒ์ญํ๋ฉด '๊ธฐ์', '๊ตถ์ฃผ๋ฆผ'์ด๋ค.
์ฐ์ ์์๊ฐ ๋ฎ์ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ฐ์ ์์๊ฐ ๋์ ์ค๋ ๋์ ๊ณ์ ๋ฐ๋ ค์ ์์
์ ์ํํ์ง ๋ชปํ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
Mutex๋ฅผ ์ด์ฉํด ๋ฉํฐ์ค๋ ๋์ Thread Safety๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๋ค.
Mutex๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ Thread Safety๋ฅผ ์งํค๊ธฐ ์ํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ
์ด์ง๋ง ์๋ฒฝํ์ง ์์ ์๋ ์์์ ํ์ธํ๋ค.
์ค๊ณ ๋จ๊ณ์์ ํ๋ก๊ทธ๋จ์ ํน์ง์ ๊ณ ๋ คํด ์ด๋ค ์์ผ๋ก ์ค๋ ๋ ๋์์ ๊ตฌํํด์ผ ์์ ํ ์ง ๊น์ ๊ณ ๋ฏผ์ด ํ์ํด๋ณด์ธ๋ค.
๋ค์ ๊ธ์์๋ Thread Safety๋ฅผ ์งํค๊ธฐ ์ํ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ธ ThreadLocal์ ๋ํด์ ๊ณต๋ถํด๋ณด์.