AClass a ๋ผ๋ ๊ฐ์ฒด๊ฐ ์๋๋ฐ
1๋ฒ ์ค๋ ๋์์ a๋ฅผ ๋ง๊ตฌ ์ฝ๊ณ ์ฐ๊ณ ,
2๋ฒ ์ค๋ ๋๋ a๋ฅผ ๋ง๊ตฌ ์ฝ๊ณ ์ด๋ค๊ณ ํ๋ฉด
1๋ฒ์ค๋ ๋์ 2๋ฒ์ค๋ ๋๊ฐ ์ ํํ ๋์์ a๋ฅผ
์ฝ๊ณ ์ฐ๊ฑฐ๋,
์ฝ๊ณ ์ฝ๊ฑฐ๋,
์ฐ๊ณ ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ๊ฑฐ ๊ฐ์๋ฐ,
a๊ฐ ์์๋๋ก ์์ ๋์ง ์๋๊ฑด ์๊ด์ด ์๋๋ฐ ํ๋ก๊ทธ๋จ ์์ฒด์ ํฌ๋์๊ฐ ๋ ์๋ ์๋์??
ํ
์คํธํด๋ณด๋๊น ์ ์์๋ํ๋๊ฑฐ ๊ฐ์๋ฐ ํน์๋ ํด์ ๋ฌผ์ด๋ด
๋๋ต
- dc official App
์ ๊ธฐ์ ์ด์ ๋๊ธฐํ ์ ์ํค๋ ค๊ณ ๋ฝ๊ฑธ๊ธฐ ์์ํ๋ฉด ๋ฐ๋๋ฝ ๊ฑธ๋ฆด์๋์์
๊ทธ๊ฑฐ ์์ฒด๋ง์ผ๋ก๋ ํฌ๋์๋์ง ์์๊ฑด๋ ์๋๋๋ก ์ด์ผ์ด์ผ ๋ญ ํ๋ ค๊ณ ๋ฝ๊ฑธ๋ค๊ฐ ํฐ์ง์๋ ์์ด
์์๊ฐ์๊ฑด ์๊ด ์์ด์ lock ์ ๊ฑธ๊ฑด๋ฐ ๋์๊ฐ๋๋ฐ๋ ๋ฌธ์ ์๊ฒ ์ฃต? - dc App
๊ทธ๋ด...๊ป....?....์๋...๋ง๊ณ ....
data race ๋ฌธ์ ๊ฐ ์์ ์ ์์ง
๋น์ฐํ ๋ฌธ์ ๋๊ณ , ํฌ๋ฆฌํฐ์ปฌ ์น์ , ๋ฎคํ ์ค, ์ธ๋งํฌ์ด ๊ฒ์ํด์ ์ฝ์ผ๋ฉด ๋์์ด ๋ ๊ฑฐ์ ๊ฒ์์์ ๋ฉํฐ ์ฐ๋ ๋๋ ๋ก๋ฉ์ด๋ ์ค์๊ฐ ๋ฐ์ดํฐ ๋ก๋ ์ ๋์ ์ฌ์ฉํ๊ณ ์ฌ๋งํ๋ฉด ๊ฒ์ ๋ฉ์ธ ๋ก์ง์๋ ์ ์ ์ฌ์ฉํจ ๊ทธ๋์ ๋ณดํต ๊ฒ์์ cpu ์ฑ๊ธ ํผํฌ๋จผ์ค๊ฐ ์ค์ํ๊ฑฐ์
ํ๊ธด๋ค๊ตฌ์? - dc App
๋ฒ๊ทธ๊ฐ ์๊ธธ ์ ์์ ํด๋น ๋ชจ๋์์ ์ฃฝ์ ์ ์๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ๊ฒ์์ด ๋ป๋ ์๋ ์๊ฒ ์ง
a๋ฅผ ์ฝ๊ธฐ๋งํ๋ฉด ๋ฌธ์ ๋ ์์ํ ๋ฐ, a๋ฅผ ์ฐ๊ณ ์์๋ ๋ค๋ฅธ์ค๋ ๋์์ a๋ฅผ ์ฝ์ผ๋ คํ๋ฉด ์๋ชป๋ ๊ฐ์ด ์ฝํ ์ ์์. ์๋ฌ๋ ์๋ ๊ฑฐ์. ์๋ฌ๊ฐ ๋๋ค๋ฉด ๊ทธ๊ฑด ์๋ชป์ฝํ์จ ๊ฐ์ผ๋ก ์ธํ ์๋ฌ๊ฐ ๋จ.
ram์์ฒด์๋ ํด๋ญ์ด๋ผ๋๊ฒ ์์ด์ ๋๊ฐ์ CPU๊ฐ ์ ๊ทผํ๋ค๊ณ ๋์์ ์ฝ๋๋ค๊ณ ๋ ๋ง๋ชปํจ. ์ด์จ๋ ์ฝ๊ณ ์ฐ๋ Operation์ด ๋ CPU์์ ๋ฐ์ํ๋ค๊ณ ํด๋ ์ด ๋ช ๋ น์ ์ฒ๋ฆฌํ๋ Ram์ ํ๋์ ํด๋ญ์์ ์ฒ๋ฆฌ๊ฐ๋จ.(์๋ ๊ฑด ๊ทธ๋ฌ๋๋ฐ ์์ฆ์ ๋๋ ์ ๋ชจ๋ฅด๊ฒ ์) ๊ทผ๋ฐ ์ ์๋ชป์ฝํ๋๋ฉด, ์ด๊ฒ Write๊ณผ์ ์ด๋ผ๋๊ฒ ํ๋ฒ์ ์ซ ๋๋๊ฒ ์๋๋ผ ์ผ๋ง๋ Writeํ๋์ ๋ฐ๋ผ ์๊ฐ์ด๊ฑธ๋ฆด์์๋๊ฑฐ๋ผ, ๊ทธ ์์ค์ Read๋ฅผ ํ๋ฉด Validํ ๊ฐ์ด ์๋์ํ์์ ๊ฐ์ ์ฝ์ด๋ฒ๋ฆฌ๋๊น ์๋ฑํ ๊ฐ์ ๊ฐ์ ธ์๋ฒ๋ฆฌ๋๊ฑฐ.
๊ทธ๋ผ a๊ฐ์ฒด ๋ด์ int aInt1 int aInt2 ๋ฉค๋ฒ๊ฐ ์์ ๋ ๊ฐ ์ค๋ ๋์์๋ ์ฝ๋๊ฑด aInt1์ผ๋ก ์ฝ๊ณ , ์ฐ๋๊ฑด aInt2์๋ค ์จ์ฃผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๊ฒฐ๊ตญ a๋ฅผ ํตํด์ ์์ ํ๋๊ฑฐ๋ผ ์ด๊ฒ๋ ์ค์๋ ํ ์ ์๋ค๊ณ ๋ณด์๋์? - dc App
a๊ฐ์ฒด๋ฅผ ํตํด์ aint1,aint2๋ฅผ ์์ ํ๋ค๊ณ ์๊ฐํ๊ฒ ์ง๋ง, ๊ทธ๊ฒ์๋. a๊ฐ์ฒด์ ์ฃผ์๋ aInt1๋ฉค๋ฒ์ ์ฃผ์๋ ๋์ผํด. ์ด๊ฑด c์ธ์ด ๊ธฐ์ดํ ๋๋ ๋ฐฐ์ธ ์ ์์. ๋ฐ๋ผ์ a.aInt1์ ๊ทธ๋ฅ a๋ฅผ๊ฑฐ์น๋๊ฒ์๋ ํ๋ฒ์ ์ ๊ทผํ๋๊ฑฐ์. ์ด๊ฑด ํฌ์ธํฐ ๊ณต๋ถํ๋ฉด ์ดํด๊ฐ ๊ฐ๋๋ฐ ๋ ผ์ธ๋ก ์น๊ณ
aInt1์ ๋ ์ค๋ ๋์์ ์ฝ๊ธฐ๋ง ํ์ง? ๊ทธ๋ผ ์๋ฌด ๋ฌธ์ ์์. aInt2๋ ๋ ์ค๋ ๋์์ ๋์์ ์ฐ๊ธฐ๋ฅผ ํ์ง? ์ด๊ฑด ๋ฌธ์ ๊ฐ ์๊น. Thread1์์๋ 2๋ผ๋ ๊ฐ์ Thread2์์๋ 4๋ผ๋ ๊ฐ์ ์ด๋ค๊ณ ํ์๋, ์์๋ ๋ณด์ฅ์ด ์๋๊ณ , 2๊ฐ๋ค์ด๊ฐ์ง 4๊ฐ๋ค์ด๊ฐ์ง ์์์์. ์๋, ์ฌ์ง์ด 2๋ 4 ๋์ค ํ๋๊ฐ ์จ์ ํ ๋ค์ด๊ฐ์์์์ง๋ ์ฅ๋ด์ ๋ชปํด. ์๋ง int์ ๊ฒฝ์ฐ๋ ์๋ฃํ์ด ์์์ Atomic Operation์ด ๋ณด์ฅ์ด ๋ ์๋ ์์ด์ ๊ทธ๋ฐ์ผ์ ์์์ง๋. ์์ํ ์ฉ์ด๊ฐ์ผ๋ฉด ์ด๋ฐ๊ฑด ์ฐพ์๋ด.
๋คํํ ์ ํ๋ก์ ํธ๋ ํ ๊ฐ์ฒด์ ๋์์ ์ธ์ผ์ ์์ด์ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค์. ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค. - dc App
๊ทธ๋ฆฌ๊ณ Thread๋ฅผ ๊ณต๋ถํ๊ธฐ์ ์ ์ผ๋จ, C์ธ์ด ํฌ์ธํฐ ๊ณต๋ถ๋, ์ปดํจํฐ ๋์์๋ฆฌ๋ฅผ ์ข๋ ๊ณต๋ถ๋ฅผ ํด๋ณด๊ธธ ๊ถํจ. Thread๋ฌธ์ ๋ ์ธ์ด์ฑ ์์๋ ๋ค๋ฃจ๊ธดํ์ง๋ง ์ํํธ์จ์ด ๋ ๋ฒจ๋จ์์ ๋ค๋ฃจ์ง ํ๋์จ์ด์ ์ผ๋ก๋ ๋ค๋ฃจ์ง ์์. ์ด์์ฒด์ ์ฑ (๊ณต๋ฃก์ฑ ์ถ์ฒ)์์๋ ์ข๋ ๊น์ํ ๋ฐฐ์ธ์๋ ์์. ์๋๋ฉด ์ด์ ๋ธ๋ฆฌ์ชฝ๋ ๋ณด๋๊ฒ๋ ์ข์๋ฏ. ์ฐ๋ ๋๋ ์ฐ๋ฉด ์ต๊ฐ์ ๋๋ ์ด๋ค ๋ฉ์ง ๋ฐฑ๋ง๋ฒ์ด๋ผ๊ธฐ๋ณด๋จ, ํ๋ง๋ฒ์ ๊ฐ๊น์. ํด๊ฒฐํด์ผ ํ ๋์ ๋ค์ด ๋ง๊ฑฐ๋ . ๋ฉํฐ์ค๋ ๋๋ฅผ ํจ์ผ๋ก์ ์๊ธฐ๋ ๋ฌธ์ ๋ค์ ์ฐํํ๊ธฐ ์ํ ๊ธฐ๋ฒ๋ค๋ ์์์ด ๋ง์. ์ ๋ ์ฒซ์ ์ ๋ฐฐ๋ถ๋ฅผ ์ ์์ผ๋ ๊ธฐ์ด๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผํด๋ด
์ด์ ๋๋ฅผ ๋ชจ๋ฅด๋ฉด ์์ฐ๋๊ฒ๋ต์ ๋ฐ์์ฝ๋์๋๋ฉด lock ๊ฑธ์ด๊ทธ๋ฅ
๋์ ์์ธ์? - dc App
๋๊ณ ์์
์ด๋ป๊ฒ ์๊ฐํ์ธ์? - dc App
๋ด๋ง๋๋กํด ์ฝ๊ณ ์ฐ๋์ฝ๋์ ๋ฝ๊ฑธ์ดc#์ด๋ฉด c++ mutex ์ฑ๋ฅ์์ด์์ท์ผ๋ฉด์ ๊ฒ๊ฐ์ฅ๊ฐ๋จ