[C++] thread, mutex, atomic
C++์์๋ C++11๋ถํฐ ์ค๋ ๋๋ฅผ ์ง์ํ๋ค.
thread ํค๋์ thread ํด๋์ค๋ก ์๊ณ ,
์์ฑ์๋ก ํจ์๋ฅผ ๋๊ธฐ๋ฉด ์์ฑ๋์๋ง์ ์ํ๋๋ ํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ด์ฉํด 3๊ฐ์ ์ค๋ ๋์์ย ํ๋์ num ๋ณ์๋ฅผ ์์ ํ๋ ํ๋์ ํ ์๊ฐ ์๋ค. ์ด๋ฅผ ์์์ ๊ณต์ ๋ผ๊ณ ๋ ํ๋๋ฐ...
์ผ๋จ ์ฝ๋๋ฅผ ๋ณด๊ฒ ๋ค.
3๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๋ค์ด๊ฐ๋ฉด์ num ๋ณ์๋ฅผ 20๋ฒ์ฉ ์ฆ๊ฐ์์ผฐ๋ค. ๊ทธ๋ผ num์ ์ต์ข
๊ฐ์ 60์ด ๋์์ผํ๋๋ฐย 3์ด ๋น ์ก๋ค.
์ด๋ฅผ ๋๊ณ ๋ฐ์ดํฐ ๋ ์ด์ค๋ผ๊ณ ํ๋๋ฐ, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ฐ๋ ๋์์ ํ๋ค๋ณด๋ ์ถฉ๋์ด ๋์ ๊ทธ๋ ๋ค.
์ด์ ๋ํ ๊ฐ๋จํ ํด๊ฒฐ๋ฒ์ผ๋ก๋ ๋๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
lock์ ์ด์ฉํด์ ํฌ๋ฆฌํฐ์ปฌ์น์
์ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ด ์ฒซ์งธ๊ณ ,
atomic, ์์์ ์ ๊ทผ์ ์ด์ฉํ ๋ฐฉ๋ฒ์ด ๋์งธ๋ค.
์ ๊ทธ๋ฆฌ๊ณ ์ ์ฝ๋์์ sleep_for์ ํด๋น ์ค๋ ๋๋ง ์ ์ ๋ฉ์ถ๋ ํจ์๋ค. ๊ทธ๋ฅ Sleep์ ๋ค ๋ฉ์ถฐ๋ฒ๋ฆฌ๋ ๊ฒ ๊ฐ๋๋ผ... ์ฐ์ถ์ ์ํด์ ๋ฃ์๊ฑด๋ฐ ์ ๋ ๊ฒ๋ผ๋ ์ ๋ฉ์ถ๋ฉด ++์ฐ์ฐ์ ์๋๊ฐ ๋๋ฌด ๋นจ๋ผ์ ์ถฉ๋์ด ์ ๋์ง ์๋๋ค.
๋จผ์ lock์ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์จ๋ณธ๋ค.
์ด์ ๋ํ ๊ธฐ๋ฅ์ mutex ํค๋์ mutex๋ผ๋ ํด๋์ค๋ก ์ ๊ณต๋๋๋ฐ ๋ฎค์ธ์ผ ์ต์คํด๋ฃจ์๋ธ์๋? ๊ทธ๊ฑฐ ์ถ์ฝ์ด๋ผ ํ๋๋ผ.
์ด์จ๋ ์ด๋ ๊ฒ ์ธ ์ ์๋ค.
์ด ๋ฐฉ์์ lock์ด๋ผ๋ ๊ฒ์ ๋๊ณ , lock์ ํ๋ํ ํ๋์ ์ค๋ ๋๋ง ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ํ๋๊ฒ ํด์ ์ถฉ๋์ ๋ฐฉ์งํ๋ ๊ธฐ๋ฒ์ด๋ค.
ํด๋น lock์ด ๋๋๋ฉด lock์ ๋ค๋ฅธ ์ค๋ ๋์๊ฒ ๋๋ ค์ฃผ๊ณ lock์ด ์๋ ์ค๋ ๋๋ ๊ทธ๋ฅ ๊ธฐ๋ค๋ฆฐ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋๊ณ ์๋ ์ค๋ ๋๊ฐ ๊ต์ฅํ ๋ง์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ฉด ์ค๋ ๋ฉ์ ์ฅ์ ์ด ๋ฐํ ๋ง๋ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ๊ณต์ ๊ฐ ์์๋ก ์ผ์ด๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด atomic์ด ์ข๋ค(๊ณ ๋ง์ด์ด์ค ์จ๊ฐ ๋งํ๋ ๊ฒ ๊ฐ๋ค.)
๊ณต์ ํ ๋ณ์๋ฅผ ์ด๊ฑธ๋ก ์ฐ๋ฉด ๊ทธ๋ฅ ์ถฉ๋์ด ์ ๋๋ค.
์์ํํ๋ ๋ฐฉ์์ด๋ผ๊ณ ํ๋๋ฐ ์ฌ์ค ์ ํํ ์๋ฆฌ๋ ์ ๋ชจ๋ฆ.