๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bXRevo/btsqwVSwjMF/NMXOlmDMfP1FBUtcf8wUxK/img.png)
[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๋ฒ ์ผ์ด๋๋๋ฐ, ์ค์ ๋ก ๋ด์ฉ์ ์ฐ๋ ๊ฒฝ์ฐ๋ ์ผ์ฃผ์ผ์ ํ ๋ฒ ์ผ์ด๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ด๋, ์ฌ์ค ๋ด์ฉ์ ์ฝ์ ๋๋ง๋ค ์ฐ๋ ๋๋ณ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cfA5h3/btspeIfOPkP/czx1UyIG69ppLnvHIE4xKk/img.png)
[C++ ๊ฒ์ ์๋ฒ] 1-21. ThreadManager ํต์ฌ : 1. Thread ๋ฅผ ์ง์ ์์ฑํ๊ธฐ๋ณด๋ค, ThreadManager ๋ฅผ ํตํด ์์ฑํด ๋ณด์. 2. ThreadManager ๋ฅผ ํตํด ์ฐ๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ฉด, ์ด๊ธฐํ ๋ฐ ์ข ๋ฃ ์์ ์ ์์ ์ ์๋ํ์ํฌ ์ ์์ ๊ฒ์ด๋ค. 3. CRASH ๊ด๋ จ ๋งคํฌ๋ก๋ฅผ ์ ์ฉํ๊ฒ ํ์ฉํ์. ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์๋ฒ ๊ตฌ์ถ์ ์์ํ๊ธฐ ์ ์, Thread ๊ด๋ฆฌ๋ฅผ ๋์์ค ThreadManager ๋ฅผ ๋ง๋ค์ด ๋ณด๋๋ก ํ๊ฒ ๋ค. ์๋ฆฌ๋ ๊ธฐ๋ฅ์ ๊ฐ๋จํ๋ค. ํ์ฌ๋ก์๋ Thread Local Storage ์ ๊ฐ ์ฐ๋ ๋๋ณ๋ก ID ๋ฅผ ๋ถ์ฌํ๊ณ , ์์ฑ์์ ์ด๋ฅผ ์ถ๋ ฅํ๋ ์ ๋์ ๊ธฐ๋ฅ๋ง ๋ง๋ค ๊ฒ์ด๋ค. ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ๋น ๋ฅด๋ค. ThreadManager.h #pragma once #include #in..
๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bLpFK8/btso5tdgZs2/cBzIC0JsUfzKsWArEOcBL1/img.png)
[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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bZl48Y/btsoNW8mANW/aACkVJH86wnZ2Ppd4iDUkK/img.png)
[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 ๊ฐ์ ์๋ฃ๊ตฌ์กฐ์ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ์ ๊ทผํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ์ ์์ฉํ๋ฉด, ๊ฐ ์ฐ๋ ๋๊ฐ ํน์ ์๋ฃ๊ตฌ์กฐ์ ์ ๊ทผํ ๋๋ง๋ค ๋ฝ์ ๊ฑธ๊ณ ํ๊ธฐ๋ฅผ ๋ฐ๋ณตํด์ผ ํ๊ฒ ์ง๋ง... ์ด๋ ์ฌ์ค ๋งค์ฐ ๊ท์ฐฎ์ ์ ์๋ค. ๊ทธ๋ฅ ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/LV4PR/btsoyWBd97Z/3T7MpEDES2F0NyTaD63Sj1/img.png)
[C++ ๊ฒ์ ์๋ฒ] 1-15. Thread Local Storage ํต์ฌ : 1. Thread Local Storage(TLS) ๋, ์ฐ๋ ๋ ๋ณ๋ก ํ ๋น๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ฏธํ๋ค. 2. TLS ๋ฅผ ์ด์ฉํ๋ฉด, ๊ฐ ์ฐ๋ ๋๋ณ๋ก ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ ๋ ํ์ด๋ ๋ฐ์ดํฐ ์์ญ์์ ๋ณ๋์ ๋ณ์ ์ ์ธ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ ์ ์์ด ๋ถํ์ํ Race Condition ์ ํผํ ์ ์๋ค. 3. TLS ๋ ์ปดํ์ผ๋ฌ ์์กด์ ์ผ๋ก ์ ์ธํ ์๋ ์์ง๋ง, C++ ์์๋ ์ด์ ์ธ์ด ํ์ค์์ ํด๋น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. Thread Local Storage ๋, ์ฐ๋ ๋ณ๋ก ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์๋ฏธํ๋ค. ์คํ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ณ๋์ stack ์์ญ์ด ์กด์ฌํ๊ณ , Heap ๊ณผ ๋ฐ์ดํฐ ์์ญ์ ๊ณต์ ํ๋๋ฐ... TLS ์ ๊ฒฝ์ฐ, ๊ฐ ์ฐ๋ ๋๋ณ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c0skfu/btsoyrTAPOI/OfUo3yMzdntKr6RNSZZdZK/img.png)
[C++ ๊ฒ์ ์๋ฒ] 1-14. ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ (atomic, ์ฝ๋ ์ฌ๋ฐฐ์น) ํต์ฌ : 1. atomic ์ฐ์ฐ์ด๋, ๋ง ๊ทธ๋๋ก ํด๋น ์ฐ์ฐ์ด '์์์ '์ผ๋ก ์ํ๋๋ค๋ ๋ป์ด๋ค. '์์์ ' ์ด๋ผ๋ ๊ฒ์, ํด๋น ์ฐ์ฐ ์ฌ์ด์ ๋ค๋ฅธ ์ฐ์ฐ์ด ๋ผ์ด๋ค์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. 2. ์ปดํ์ผ๋ฌ๋ ์ฌ๋ฌ ์ด์ (์ฃผ๋ก ์ต์ ํ)๋ก ์ฝ๋๋ฅผ ์ฌ๋ฐฐ์นํ๋๋ฐ, ์ด๋ฌํ memory order ๋ ๋ชจ๋ ์ฐ๋ ๋๋ค์ด '์์ ์์' ์ ๋์ํ๋ค๋ ์์น์ ์ง์ผ์ผ ํ๋ค. 3. ๋ํ์ ์ผ๋ก ๋ค์ ์ธ ๊ฐ์ง์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ ์ต์ ์ด ์๋ค : memory_order_relaxed, memory_order_release, memory_order_seq_cst ์์์ ์ฐ์ฐ์ด๋ ๋ฌด์์ผ๊น? ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์์ ์ฐ์ฐ์ ๋ง์น ์ผ์์ ์ผ๋ก ๋ฝ์ ๊ฑด๋ค๊ณ ์๊ฐํ๊ธฐ ์ฝ์ง๋ง, ์ ํ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/coHKTY/btsofaeVpa0/bL9YFeytc9Fa91rKK9u6GK/img.png)
[C++ ๊ฒ์ ์๋ฒ] 1-13. CPU ํ์ดํ๋ผ์ธ (feat. ์ฝ๋ ์ฌ๋ฐฐ์น) ํต์ฌ : 1. ์ปดํ์ผ๋ฌ๋ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ๋ฐฐ์นํ๋ ๊ณผ์ ์์ ์ฝ๋ ์ฌ๋ฐฐ์น๋ฅผ ํ ์ ์๋ค. ์ด ๊ณผ์ ์์ ์๋์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋ ์ ์๋ค. 2. CPU ํ์ดํ๋ผ์ธ์ CPU ๊ฐ ๋ช ๋ น์ด๋ฅผ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํ ์์คํ ์ด๋ค. CPU ํ์ดํ๋ผ์ธ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ฒ ๋๋ฉด, ์ต์ ํ๋ฅผ ์ํด ์ปดํ์ผ๋ฌ๊ฐ ์์๋ก ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์ฌ๋ฐฐ์นํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค. ์ฑ๊ธ ์ฐ๋ ๋์์๋ ์์ฐจ์ ์ผ๋ก ๋ก์ง์ด ์คํ๋จ์ด ๋ณด์ฅ๋์ง๋ง, ๋ฉํฐ ์ฐ๋ ๋์์๋ ๊ผญ ์๋๋๋ก ํ๋ก๊ทธ๋จ์ด ๋์ํ์ง ์์ ์ ์๋๋ฐ... ๋ค์ ์ฝ๋๋ฅผ ๋ณด์. volatile bool ready = false; // ๊ฐ์์ฑ, ์ฝ๋ ์ฌ๋ฐฐ์น int32 x = 0; int32 y = 0; int32 r1 = 0;..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/voDWK/btsofp99nsm/rjfWcCgobovXW7Rmp28ZM0/img.png)
[C++ ๊ฒ์ ์๋ฒ] 1-12. ์บ์ (Temporal Locality, Spatial Locality) ํต์ฌ : 1. RAM ์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋, ์์ฃผ ์ฐ์ผ ๊ฒ์ผ๋ก ์์๋๋ ๋ฐ์ดํฐ๋ ์บ์์ ์ ์ฅ๋๋ค 2. ์บ์ฑ ์ฒ ํ์๋ Temporal Locality ์ Spatial Locality ๊ฐ ์๋๋ฐ, ๊ฐ๊ฐ '์ต๊ทผ์ ์ฌ์ฉ๋ ๋ ์์ ๋ค์ ์ฌ์ฉ๋ ํ๋ฅ ์ด ๋๋ค' , '๋ฉ๋ชจ๋ฆฌ์์ผ๋ก ๊ฐ๊น์ด ์๋ ๋ ์์ ํจ๊ป ์ฌ์ฉ๋ ํ๋ฅ ์ด ๋๋ค' ๋ผ๋ ์ถ๋ก ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. 3. ์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐํ๋ฅผ ํ ๋๋ ์์ Temporal Locality ์ Spatial Locality ๋ฅผ ๊ณ ๋ คํ์ฌ ์ค๊ณ๋ฅผ ํ๋ ๊ฒ์ด ์ข๋ค. ํํ ์ฐ๋ฆฌ๋ ์บ์๋ฅผ ํตํด ๊ฐ์ ์กฐํํ ๋, ์ฐ๋ฆฌ๊ฐ ํ์ํ ์ ๋ณด๋ง ์ป์ด์ฌ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง๋ง, ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์๋ค..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uf9M0/btsn7tY90bg/8rVQRaeSykFPdAcWoRAeO1/img.png)
[C++ ๊ฒ์ ์๋ฒ] 1-11. future, promise, packaged_task ํต์ฌ : 1. future, promise, packaged_task ๋ ๋จ๋ฐ์ฑ ์ด๋ฒคํธ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ ๋ ์ ์ฉํ๋ค. 2. ์ธ ๋ ์์ ์ฐจ์ด๋ Level of Control ์ ๋ฌ๋ ค ์๋ค. future ๋ ํน์ ํจ์์ ์์ ์ ๋งก๊ธฐ๊ณ , packaged_task ๋ ์์ ์ ๋ง๋ ๋ค์, ์ฐ๋ ๋์ ์ด๋ฅผ ์ค์ด ๋ณด๋ธ๋ค. ๋ง์ง๋ง์ผ๋ก, promise ๋ ์์ ์ ์ค์ด ๋ณด๋ด๋ฉด์, ๋์์ ์ค์ด ๋ณด๋ด๋ ํจ์ ๋ด๋ถ์์ future ์ ๋๊ธธ ๊ฐ์ ์ปค์คํ ํ๊ฒ ์ธํ ํ ์ ์๋ค. 3. '๋น๋๊ธฐ์ '์ธ ์์ ๊ณผ '๋ฉํฐ์ฐ๋ ๋' ๋ ๋ค๋ฅธ ์๋ฏธ์ด๋ค. ์ด๋ค ์์ ์ด ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค๊ณ ํด์, ๊ผญ ๋ฉํฐ์ฐ๋ ๋๋ฅผ ์ด์ฉํ ํ์๋ ์๋ค. ์ฌ์ค ์์ฃผ ์ฐ์ด๋ ๋ ์๋ค์..