์ถ์ต์ j-rpg ๊ฒ์์ ์ด๋ ๊ฒ ์ผ๋ฆญ์ด ์์ผ๋ฉด
์ wait์ด๋ผ๋ ๊ฒ์ด์ง๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ํด์ด ์ค๊ณ ,ย
์๊ธฐ ํด์ ๊ณต๊ฒฉํ๊ธฐ, ๋ง๋ฒ์ฐ๊ธฐ, ์์ดํ ์ฌ์ฉํ๊ธฐ ๋ฑ์ ํ๋์ ํ ์ ์๋ค.
๋ฌผ๋ก ์๊ธฐํด์ ํ๋์ ํ๋ฉด ์ ๋ถ๋ถ์ด ๋ค์ ์ด๊ธฐํ๋๋ค.
์ต๊ทผ์ NDC2016 ์ค ํ ๋ผ ์๋ฒ ์น์ ๊ฐ์๋ฅผ ๋ฃ๋ ๋์ค
c++์ std::future, std::promise, std::launch::async ๋ฑ ์ ์ฐ์ง ์๋ ๋ฌธ๋ฒ๋ค์ด ๋์ ํฅ๋ฏธ๋ก์ ๊ณ
์ด๋ฅผ ์ด๋ป๊ฒ ํ์ฉํด๋ณผ๊น ํ๋ค๊ฐ ์ ์์ j-rpg ์ ํฌ๋ฅผ ๊ตฌํํด๋ณด๊ณ ์ ํ์.
์ ๋ ํด๋์ค์.
์ ๋์ด ์งค๋ฐฉ์ ์ ํฌํ๋ ์ผ๋ฆญํฐ๊ณ , ์์ฑ์์์ ๊ฐ์ ์ด๊ธฐํํ ์ ์๊ฒ ํ๊ณ
๋ฉ์๋์ ๋ํด์๋ ์ด๋ฆ์ผ๋ก ์ถฉ๋ถํ ์ค๋ช ์ด ๋๋ค๊ณ ๋ณด๊ณ , ์ดํด๊ฐ ์๊ฐ๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ .
promise ์ future๋ฅผ ํ๋๋ก ํฉ์น ๊ตฌ์กฐ์ฒด. ์ฌ๊ธฐ์ ์ด๊ธฐํ๊น์ง ๋ค ํด์ฃผ๊ฒ๋ ํจ.
promise์ future์ ๋ํด์ ๋๋ ์์ง ์์๊ฐ๋ ๋จ๊ณ๋ผ ๋ญ๋ผ ๋ช ํํ๊ฒ ์ค๋ช ํ๊ธด ๊ทธ๋ฐ๋ฐ
๋ thread๊ฐ ํต์ ์ ์์์์ํ๊ฒ ํด์ฃผ๋ ์ฉ๋๋ก ํ์ฉํ์ด
์ฌ๊ธด ๋์์ ๋ํ ํจ์๋ค์ด์ผ.
calc ํจ์๋ ๋งค๋ฒ ์ ๋๋ค์ ์คํผ๋ ๋งํผ wait(delay) ๊ฒ์ด์ง๋ฅผ ์ฑ์ฐ๊ณ , ๋ง์ฝ ๊ฝ ์ฐจ๋ฉดย
"promise์ ๊ฐ์ ๋ฃ์ด์ค์ผ๋ก์ future์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ๋" ํด์ค
run ํจ์๋ promise์์ ๊ฐ์ getํ future๊ฐ์ ๋ด๋ฑ๋๊ฑฐ์ง
์ tcpํต์ ์์ ๊ฐ์ recviveํ๊ฒ๋ ํ๋ฉด ์ฌ๊ธฐ์ waitํ๊ณ
๋๊ฐ sendํ๋ฉด wakeํด์ ์๋ํ๋ ์์ผ๋ก
future๊ฐ get()์ ๋๋ฆฌ๋ฉด promise๊ฐ set()ํ๊ธฐ ์ ๊น์ง ์๊ณ ์๋ค๊ณ ๋ณด๋ฉด ๋จ.
์ด๊ฒ ๋ฉ์ธ ๋ถ๋ถ์ด์ผ
์ ๋๋ค ์ ๋ณด๋ฅผ ์ค์ ํ๊ณ
์๊น promise ์ future๋ฅผ ์ด๊ธฐํํ๊ณ
๊ฐ calc์ run ํจ์๋ฅผ ์ฐ๋ ๋๋ฅผ ๋๋ ค.
๊ทธ๋ผ ๊ฒฐ๊ณผ๊ฐ์ด?
์ด๋ ๊ฒ A B C D ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋๊ฑด ๋๋ฒ๊ทธ? ์ ๋์๊ฐ๋์ง ํ์ธ์ผ๋ก ๋ฟ๋ฆฌ๋๊ฑฐ๊ณ
run์ด ๋งค๋ฒ ์ ๋๋ก ๋๊ตฌ์ turn์ธ์ง ํ์ธํด์ค์ ์ ์ ์์ง.
์ถ๋ ฅ์ ๋ฐ๋ก cout์ผ๋ก ์ํ๊ณ stringstream์ด ์ด์ ๋
๋ ์ฐ๋ ๋๊ฐ ๊ฐ์ ๋๋๋ฐ cout๋ง ์ฐ๋ฉด ์๋ก ์ถ๋ ฅํด์ ์ฐ๋ฆฌ ๋์ ๊ผฌ์ฌ๋ณด์ด๊ณ ,
lock_guard ์ผ๋ก io๋ฅผ mutex๋ก ๋ง์๋ดค๋๋ฐ, ๊ทธ๋ ๊ฒ ํ๋ calc๋ฅผ ๋ค ์ถ๋ ฅํ๊ณ run์ ์ถ๋ ฅํ๋๋ผ...ใ ใ
์ํผ promise + future ์ด๊ฑฐ ์ฌ๋ฐ์ผ๋๊น ์์ง ์์จ๋ณธ c++ ์ ์ ๋ค์ ํ์ฉํด๋ด์ฌ!
๋ ์ด์ ์ด๊ฑธ ๋ค๋ฌ์ด ๊ฒ์ ํ๋ ๋ง๋ค์ด๋ด์ผ๊ฒ ์!
http://gall.dcinside.com/board/view/?id=programming&no=582851&page=1
๋ด๊ฐ ํ๊ฐค์ ์ด๊ฑฐ ๋ณต๋ถํด์ด
ํฌ ๋๋ ์ด๊ฑฐ ๋ค์์๋๋ฐ ์ด๋ ๊ฒ ํ์ฉํ๋ ์ฌ๋ ์์ผ๋๊น ๋๊ฒ ๋ฉ์์ด๋ณด์ธ๋ค
์ง์ฐ์ง ๋ง์ธ์ฌ
๊ตฟ