๋ชฉ๋ก์ ์ฒด ๊ธ (1096)
KoreanFoodie's Study
[C++ ๊ฒ์ ์๋ฒ] 2-2. ์ค๋งํธ ํฌ์ธํฐ ํต์ฌ : 1. ์ค๋งํธ ํฌ์ธํฐ์๋ 3์ข ๋ฅ๊ฐ ์๋ค. unique_ptr, shared_ptr, weak_ptr. ์ด ์ค, unique_ptr ๋ ์์ ๊ถ ๊ฐ๋ ์ ์ํ ๊ฐ๋จํ๊ณ ๊ฐ๋ฒผ์ด ์ค๋งํธ ํฌ์ธํฐ์ด๋ค. 2. shared_ptr ๋ฅผ ์์ฑํ๋ฉด ์ฌ์ฉํ๊ณ ์ ํ๋ ํ์ ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ์ ์ฐธ์กฐ ์นด์ดํธ ๋ฑ์ ๊ด๋ฆฌํ๋ ์ ์ด ๋ธ๋ก(Control Block)์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ๋ค ํ ๋น๋๋ค. shared_ptr ์ ๊ฒฝ์ฐ ์ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ฃผ์ํด์ผ ํ๋ค! 3. shared_ptr ์ ๋ํ ์ฐธ์กฐ ํ์๊ฐ ์ฌ๋ผ์ง๋ฉด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋๋, ๋ง์ฝ ํด๋น ํฌ์ธํฐ๋ฅผ ์ฐธ์กฐํ๋ weak_ptr ๊ฐ ์์ ๊ฒฝ์ฐ, ์ ์ด ๋ธ๋ก์ ํด๋น ํฌ์ธํฐ๋ฅผ ์ฐธ์กฐํ๋ weak_..
[C++ ๊ฒ์ ์๋ฒ] 1-25. Reference Counting ํต์ฌ : 1. ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์, ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ธ์ ๋ ์ํํ๋ค. ์๋์น ์๊ฒ delete ๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. 2. ์ผ๋ฐ์ ์ผ๋ก๋ Smart Pointer ๋ฅผ ํตํด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ, ํต์ฌ์ ์ธ ๋ถ๋ถ์ ๊ฒฐ๊ตญ Reference Count ๋ฅผ ์ฒดํฌํ์ฌ nullptr ์ ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ด๋ค! ๋ฌผ๋ก SharedPtr ๊น์ง ์ ๋๋ก ์จ ์ฃผ์ด์ผ ๋ฌธ์ ๋ฅผ ๋ง์ ์ ์๋ค. ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋, ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์๋์น ์๊ฒ nullptr ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ง๋ฑ๋จ๋ฆฌ๊ฒ ๋๋ค. ์๋์ ์์๋ฅผ ๋ณด์. ๋ ์ด์ค์ ํฐ๋ ์ด ์๋ค๊ณ ํ๊ณ , ํฐ๋ ์ด ๋ ์ด์ค๋ฅผ ํ๊ฒํ ํ์ฌ ๊ฒฉ์ถ ์ํค๋ ๊ฒ์ ์์ํด ๋ณด์! ..
[C++ ๊ฒ์ ์๋ฒ] 1-24. ์ฐ์ต๋ฌธ์ (์์์ ๊ฐฏ์ ๊ตฌํ๊ธฐ) ํต์ฌ : 1. ์ฐ์ต๋ฌธ์ ๋ฅผ ํ์ด๋ณด์... (์ฃผ์ด์ง ์ซ์๊น์ง์ ์์์ ๊ฐฏ์ ๊ตฌํ๊ธฐ) 2. ์ฐ๋ ๋ ํน์, future ๋ฅผ ํตํด ๊ตฌํํ ์ ์๋ค. 3. thread::hardware_concurrency() ๋ฅผ ์ด์ฉํด, ์ค์ ์ฝ์ด ๊ฐฏ์๋งํผ ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ผ ์ ์๋ค(๊ทธ๋ณด๋ค ํจ์ฌ ๋ง์ด ์์ฑํ๋ ๊ฒ๋ณด๋ค). ์ด์ ์ฐ์ต๋ฌธ์ ๋ฅผ ํ์ด๋ณด์. ์ฃผ์ด์ง ์ซ์์ ๋ํด, 1๋ถํฐ ํด๋น ์ซ์๊น์ง ์์์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ์ผ๋จ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ด์ฉํ ๊ฒ์ด๋, ๊ฐ ์ฐ๋ ๋์ ํ์ ๋ณด๋ผ ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ์ : bool IsPrime(int InInput) { if (InInput
[C++ ๊ฒ์ ์๋ฒ] 1-23. DeadLock ํ์ง ํต์ฌ : 1. ๋ฐ๋๋ฝ์ ์ก๋๋ค๋ ๊ฒ์, ๊ฒฐ๊ตญ ๋ฝ์ ์ก๋ ๋ฐฉ์์ ์์ด ์ฌ์ดํด์ด ํ์ฑ๋๋์ง๋ฅผ ํ๋จํ๋ ๊ฒ๊ณผ ๋์ผํ๋ค. 2. DFS ๋ฅผ ์์ฉํ์ฌ, ์ฌ์ดํด์ด ์๊ธฐ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ฉด DeadLock ์ํฉ์ ๋ฏธ๋ฆฌ ๊ฒ์ถํ ์ ์๋ค. DeadLock ์ ๊ฒฝ์ฐ, ๊ฐ๋ฐ ๋จ๊ณ์์๋ ๋์ค์ง ์์ผ๋, ๋ง์ ๋ผ์ด๋ธ ์๋น์ค๋ฅผ ํ๋ฉด ๊ฒ์ถ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ตฌ์กฐ์ ์ผ๋ก๋ ๋ฐ๋๋ฝ์ด ๊ฑธ๋ฆด ๋ก์ง์ด ์์์๋, ์ ์์ ์๊ฐ ๋ง์ง ์์ ๋ฐ๋๋ฝ์ด ๊ฑธ๋ฆฌ์ง ์์ ์ ์๋ค. ์ด๋ฐ ํ์ด๋ฐ ์ ์ธ ์ด์์ ์์กดํ์ง ์๊ณ , DFS ๋ฐฉ์์ผ๋ก ์ฌ์ดํด์ด ์๋์ง๋ฅผ ๊ฒ์ฌํ์ฌ, ๋ฐ๋๋ฝ ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ ์ ์๋ค. ๋ฐ๋๋ฝ์ ์ก๋๋ค๋ ๊ฒ์, ๊ฒฐ๊ตญ ๋ฝ์ ์ก๋ ๋ฐฉ์์ ์์ด ์ฌ์ดํด์ด ํ์ฑ๋๋์ง๋ฅผ ํ๋จํ๋ ๊ฒ๊ณผ ๋์ผํ๊ธฐ ๋๋ฌธ์ด..
[C++ ๊ฒ์ ์๋ฒ] 1-22. Reader-Writer Lock ํต์ฌ : 1. ์ฝ๋ ๊ฒฝ์ฐ๊ฐ ์ฐ๋ ๊ฒฝ์ฐ๋ณด๋ค ํจ์ฌ ๋ง์ ๊ฒฝ์ฐ, Read Lock ๊ณผ Write Lock ์ ๋๋์ด์ ์ฌ์ฉํ ์๋ ์๋ค. 2. Write Lock ์ ๊ฒฝ์ฐ ์ฐ๋ ๋์ ID ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ๊ถ์ ๊ฒฝํฉํ๊ณ , Read Lock ์ ๊ฒฝ์ฐ ๊ณต์ ์นด์ดํธ๋ฅผ ์ฌ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค. 3. Write Lock ์ ์ก์ ์ํ์์ Read Lock ์ ์ก๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง, Read Lock ์ ์ก์ ์ํ์์ ๋ฐ๋ก Write Lock ์ ์ก๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋๋ก ์ค๊ณํ๋ค. ๋ง์ฝ ์ด๋ค ์ปจํ ์ธ ์์, ๋ด์ฉ์ ์ฝ๋ ๊ฒฝ์ฐ๋ 1์ด์ 100๋ฒ ์ผ์ด๋๋๋ฐ, ์ค์ ๋ก ๋ด์ฉ์ ์ฐ๋ ๊ฒฝ์ฐ๋ ์ผ์ฃผ์ผ์ ํ ๋ฒ ์ผ์ด๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ด๋, ์ฌ์ค ๋ด์ฉ์ ์ฝ์ ๋๋ง๋ค ์ฐ๋ ๋๋ณ..
[C++ ๊ฒ์ ์๋ฒ] 1-21. ThreadManager ํต์ฌ : 1. Thread ๋ฅผ ์ง์ ์์ฑํ๊ธฐ๋ณด๋ค, ThreadManager ๋ฅผ ํตํด ์์ฑํด ๋ณด์. 2. ThreadManager ๋ฅผ ํตํด ์ฐ๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ฉด, ์ด๊ธฐํ ๋ฐ ์ข ๋ฃ ์์ ์ ์์ ์ ์๋ํ์ํฌ ์ ์์ ๊ฒ์ด๋ค. 3. CRASH ๊ด๋ จ ๋งคํฌ๋ก๋ฅผ ์ ์ฉํ๊ฒ ํ์ฉํ์. ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์๋ฒ ๊ตฌ์ถ์ ์์ํ๊ธฐ ์ ์, Thread ๊ด๋ฆฌ๋ฅผ ๋์์ค ThreadManager ๋ฅผ ๋ง๋ค์ด ๋ณด๋๋ก ํ๊ฒ ๋ค. ์๋ฆฌ๋ ๊ธฐ๋ฅ์ ๊ฐ๋จํ๋ค. ํ์ฌ๋ก์๋ Thread Local Storage ์ ๊ฐ ์ฐ๋ ๋๋ณ๋ก ID ๋ฅผ ๋ถ์ฌํ๊ณ , ์์ฑ์์ ์ด๋ฅผ ์ถ๋ ฅํ๋ ์ ๋์ ๊ธฐ๋ฅ๋ง ๋ง๋ค ๊ฒ์ด๋ค. ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ๋น ๋ฅด๋ค. ThreadManager.h #pragma once #include #in..
๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค.
[C++ ๊ฒ์ ์๋ฒ] 1-17, 18, 19. Lock-Free Stack ํต์ฌ : 1. Lock-Free Stack ์ ๋ฝ์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ Stack ์ ์ด๋ป๊ฒ ํ๋ฉด ์ ๋๋ก Push/Pop ์ ํ ์ ์๋์ง๋ฅผ ๋ณด์ฌ์ค๋ค. popCount ๋ ์ฐธ์กฐ๊ถ/์์ ๊ถ ๊ฐ๋ ์ ํ์ฉํด ์ด๋ฅผ ๊ตฌํํ ์ ์๋ค. 2. Lock-Free Stack ์ ์ค์ ๋ก ํ์ฉํ๊ธฐ์๋ ๊น๋ค๋ก์ฐ๋ฉฐ, Lock ๊ธฐ๋ฐ์ ์๋ฃ๊ตฌ์กฐ๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๋ผ๊ณ ์ฅ๋ดํ ์ ์๋ค. ๊ฒฐ๊ตญ ๊ฒฝํฉ์ด ์ผ์ด๋ฌ์ ๋, ์ค์ง์ ์ผ๋ก ์ญ์ ๋ฅผ ํ๋ ์ฐ๋ ๋๋ 1๊ฐ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. 3. compare_exchange_weak ์ compare_exchange_strong ๊ณผ ๋น๊ตํ์ ๋, spurious fail ์ด ์ผ์ด๋ ์๋ ์๋ค๋ ์ฐจ์ด๊ฐ ์๋ค. ๊ทธ sp..
[C++ ๊ฒ์ ์๋ฒ] 1-16. Lock-Based Stack/Queue ํต์ฌ : 1. Lock-Based Queue/Stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ๋ฉด, ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ํด๋น ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ ๋ ๋ถํ์ํ Lock ์ ์ถ๊ฐ๋ก ์ก์ ํ์๊ฐ ์์ด, ์ฑ๊ธ์ฐ๋ ๋ ํ๊ฒฝ์์์ฒ๋ผ Push/Pop ์ ์ฌ์ฉํ ์ ์๋ค. 2. Push/Pop ํจ์ ๋ด๋ถ์ ์ผ๋ก lock_guard ๋ฅผ ์ก์์ฃผ๋ฉด ๋๋ค. 3. WaitPop ์ ๊ฒฝ์ฐ, Condition Variable ์ ์ด์ฉํ์ฌ ๊ตฌํํ๋ค. Queue ๋ Stack ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ์ ์์ฉํ๋ฉด, ๊ฐ ์ฐ๋ ๋๊ฐ ํน์ ์๋ฃ๊ตฌ์กฐ์ ์ ๊ทผํ ๋๋ง๋ค ๋ฝ์ ๊ฑธ๊ณ ํ๊ธฐ๋ฅผ ๋ฐ๋ณตํด์ผ ํ๊ฒ ์ง๋ง... ์ด๋ ์ฌ์ค ๋งค์ฐ ๊ท์ฐฎ์ ์ ์๋ค. ๊ทธ๋ฅ ..
[C++ ๊ฒ์ ์๋ฒ] 1-15. Thread Local Storage ํต์ฌ : 1. Thread Local Storage(TLS) ๋, ์ฐ๋ ๋ ๋ณ๋ก ํ ๋น๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ฏธํ๋ค. 2. TLS ๋ฅผ ์ด์ฉํ๋ฉด, ๊ฐ ์ฐ๋ ๋๋ณ๋ก ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ ๋ ํ์ด๋ ๋ฐ์ดํฐ ์์ญ์์ ๋ณ๋์ ๋ณ์ ์ ์ธ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ ์ ์์ด ๋ถํ์ํ Race Condition ์ ํผํ ์ ์๋ค. 3. TLS ๋ ์ปดํ์ผ๋ฌ ์์กด์ ์ผ๋ก ์ ์ธํ ์๋ ์์ง๋ง, C++ ์์๋ ์ด์ ์ธ์ด ํ์ค์์ ํด๋น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. Thread Local Storage ๋, ์ฐ๋ ๋ณ๋ก ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ฏธํ๋ค. ์คํ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ณ๋์ stack ์์ญ์ด ์กด์ฌํ๊ณ , Heap ๊ณผ ๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ํ๋๋ฐ... TLS ์ ๊ฒฝ์ฐ, ๊ฐ ์ฐ๋ ๋๋ณ..