[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์ด ์ข‹๋‹ค(๊ณ  ๋งˆ์ด์–ด์Šค ์”จ๊ฐ€ ๋งํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.)


๊ณต์œ ํ•  ๋ณ€์ˆ˜๋ฅผ ์ด๊ฑธ๋กœ ์“ฐ๋ฉด ๊ทธ๋ƒฅ ์ถฉ๋Œ์ด ์•ˆ ๋‚œ๋‹ค.
์›์žํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์‚ฌ์‹ค ์ •ํ™•ํ•œ ์›๋ฆฌ๋Š” ์ž˜ ๋ชจ๋ฆ„.