Thread3 [C++] 21. ์ค๋ ๋ ๊ฒฝ์ ์ํ(Race condition), ๋ฎคํ ์ค(mutex), ๋ฐ๋๋ฝ, std::conditional_variable, std::async ์ง๋ ํฌ์คํ ์์๋ ๋ฉํฐ์ค๋ ๋์ ๋ฉํฐ ํ๋ก์ธ์ค, std::thread์ ๋ํด ์ดํด๋ดค์ต๋๋ค. [C++] 20. ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ(Multi-Threads) ์ค๋์ ์ด์ด์ ์ค๋ ๋๋ผ๋ฆฌ์ ์ถฉ๋ ๋ฌธ์ ์ lock ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ณ , ์ค๋ ๋๋ค(workers)์ด wait์ํ์์ ๋๊ธฐํ๋ค๊ฐ ์์ ์ด ์์ ๋ ์์์ ์ฒ๋ฆฌํ๋ ์ค๋งํธํ ์ด์๋ฐฉ์์ ๋ํด ์์๋ณด๊ณ ์ ํฉ๋๋ค. ๊ณต์ ์์(Shared Resources)๊ณผ ์๊ณ์์ญ(Critical Section) ์ค๋ ๋(Thread)๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ์์ ์คํ ๋จ์๋ก, ํ๋์ ํ๋ก์ธ์ค ์์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋ ๋ ๊ฐ์๋ ๊ณต์ ์์(Shared Resource)๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ณต์ ์์์ ์์ ํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ์๊ณ์.. 2023. 8. 22. [C++] 20. ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ(Multi-Threads) ๋ฉํฐ์ค๋ ๋(Multi-Threads) ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋์ ์ปดํจํฐ ํ๋ก๊ทธ๋จ ์์์ ์ฌ๋ฌ ๊ฐ์ ์คํ ํ๋ฆ์ธ ์ค๋ ๋(thread)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋ ฌ๋ก ์์ ์ ์ํํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ๋๋ค. ๊ฐ๋จํ ๋งํด์, ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ๋ฌ ๊ฐ์ ์์ "๋ถ๋ถ ์์ "์ ๋์์ ์คํํ์ฌ ์ ์ฒด ์์ ์ ๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฃผ์ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: 1. ์ค๋ ๋ (Thread): ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ๋ํ๋ด๋ ํ๋์ ๋จ์๋ก, ๋์์ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์คํํ๋ฉด ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. 2. ๋ณ๋ ฌ์ฑ (Concurrency): ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋์ง๋ง, ์ค์ ๋ก ๋์์ ์คํ๋๋ ๊ฒ์ ํ๋ก์ธ์์ ๋ฌผ๋ฆฌ์ ํ๊ณ ๋๋ฌธ์ ์ ํ๋ ์ .. 2023. 8. 18. std::thread์ std::async โ ์ค๋ ๋ ๊ธฐ๋ฐ ์ ๊ทผ vs ๊ณผ์ ๊ธฐ๋ฐ ์ ๊ทผ work๋ผ๋ ํจ์๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง ์ ๋๋ค. ํ๋๋ std::thread ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๊ทธ ๊ฐ์ฒด์์ work๋ฅผ ์คํํ๋ ๊ฒ์ด๊ณ , ์ด๋ ์ค๋ ๋ ๊ธฐ๋ฐ(thread-based) ํ๋ก๊ทธ๋๋ฐ์ ํด๋นํฉ๋๋ค. ๋ ํ๋๋ work๋ฅผ std::async์ ๋๊ฒจ์ฃผ๋ ๊ฒ์ด๊ณ ์ด๋ ๊ณผ์ ๊ธฐ๋ฐ(task-based) ํ๋ก๊ทธ๋๋ฐ์ ํด๋นํฉ๋๋ค. int work(); std::thread t(work); auto f = std::async(work); ์ ์ฝ๋๋ฅผ ์ง๊ด์ ์ผ๋ก ๋ณด์์ ๋, async๋ฅผ ์ฐ๋ฉด work์ ๋ฐํ ๊ฐ์ ์ป์ ์ ์๋ค๋ ๊ฒ์ด ๋ณด์ ๋๋ค.(std::get์ ํตํด ์ป์ ์ ์์ต๋๋ค)(thread๋ ํจ์์ ๋ฐํ ๊ฐ์ ์ป์ ์ ์์ต๋๋ค.) ์ด๊ฒ ๋ฟ๋ง ์๋๋ผ .. 2023. 1. 14. ์ด์ 1 ๋ค์