λͺ©λ‘μ 체 κΈ (1099)
KoreanFoodie's Study
[C++ κ²μ μλ²] 1-7. SpinLock ν΅μ¬ : 1. SpinLock μ Lock μ μ‘κΈ° μν΄ '무μμ κΈ°λ€λ¦¬λ' λ°©μμ΄λ€. 2. SpinLock μ atomic λ³μμ lock, unlock ν¨μλ‘ μ½κ² λ§λ€ μ μλ€. compare_exchange_strong ν¨μλ₯Ό κΈ°μ΅νμ. 3. SpinLock μ λΆνμν CPU clock μ λλΉνμ§λ§, λλ‘λ 컨ν μ€νΈ μ€μμΉμ λλ κ²λ³΄λ€ λΉμ©μ΄ μ λ ΄ν μλ μλ€. μ΄μ 본격μ μΌλ‘ SpinLock μ ꡬνν΄ λ³΄μ. SpinLock μ κ°λ¨νλ€. κ·Έλ₯ Lock μ μ‘μ λκΉμ§ 무μμ While λ¬Έμ λλ©΄μ κΈ°λ€λ¦¬λλ‘ λ§λ€ κ²μ΄λ€ π€£ κ°λ¨νκ² μκ°νλ©΄ μλμ κ°μ΄ ꡬννκ² μ§λ§... int sum = 0; class SpinLock { private: b..
[C++ κ²μ μλ²] 1-6. Lock ꡬν μ΄λ‘ ν΅μ¬ : 1. Lock μ ꡬννλ λ°©μμ ν¬κ² μΈ κ°μ§λ‘ λλλ€. 무μμ κΈ°λ€λ¦¬κΈ°, μ μ ν λμμ€κΈ°, κΉ¨μμ€ λκΉμ§ κΈ°λ€λ¦¬κΈ° 2. SpinLock μ μ¬μ©νμ¬ λ¬΄μμ κΈ°λ€λ¦¬κ±°λ, μ΄λ μ λ Sleep μ νκ³ λ ν Lock μ λ€μ μ‘μΌλ €κ³ μλν μλ μλ€. 3. νΉμ λ€λ₯Έ μΌμ νλ€κ°, Lock μ μ‘μ μ μκ² λλ μνκ° λμμ λ λ Έν°λ₯Ό λ¬λΌκ³ μμ²ν μλ μλ€. μλ₯Ό λ€μ΄ Condition Variable μ΄ μλ€. μ΄ κ³Όμ μμ 컨ν μ€νΈ μ€μμΉμ΄ μΌμ΄λ μ μλ€! 본격μ μΌλ‘ Lock μ ꡬννκΈ° μ , Lock μ ꡬννλ μΌλ°μ μΈ λ°©μ 3 κ°μ§μ λν΄ λ¨Όμ μκ°νκ³ κ°λλ‘ νκ² λ€. μ¬μ€ λ΄μ©μ κ°λ¨νλ€. Lock μ΄ μ΄λ―Έ κ±Έλ¦° μνλΌκ³ ν ..
[C++ κ²μ μλ²] 1-5. DeadLock μ κ°λ κ³Ό κΈ°μ΄ (+ std::lock) ν΅μ¬ : 1. DeadLock μν©μ, μ¬λ¬ μ°λ λλ€μ΄ Lock μ μλ‘ μ‘κ³ μμ΄ νκ±°λ μλ‘ μ‘μ§ λͺ»νλ κ΅μ°© μνλ₯Ό μλ―Ένλ€. 2. DeadLock μν©μ Lock μ μ‘λ μμλ₯Ό μ μ‘°μ νκ±°λ, μ μ ν Lock μ μ¬μ©νμ¬ ννΌν μ μλ€. 3. std::lock μ μ¬λ¬ κ°μ Lock μ DeadLock μμ΄ νκΊΌλ²μ μ‘μ μ μλλ‘ λμμ€λ€. λ€μκ³Ό κ°μ΄, Lock μ΄ 2κ° μ‘΄μ¬νκ³ μ°μ°μ μν΄ Lock 2 κ°λ₯Ό μ λΆ μ‘μμΌ νλ€κ³ κ°μ νμ. int sum = 0; mutex mutexAdd; mutex mutexSub; void Add() { for (int i = 0; i < 1000; ++i) { mu..
[C++ κ²μ μλ²] 1-1. λ©ν°μ°λ λ κ°λ‘ ν΅μ¬ : 1. Critical Section μ μ§μ ν λλ mutex λ±μ νμ©νμ¬ Lock μ κ±Έλ©΄ Race Condition μ ν΄μν μ μλ€. 2. μΌλ°μ μΌλ‘ μ§μ lock/unlock μ ν΄μ£ΌκΈ° 보λ€, lock_guard λ unique_lock μ μ¬μ©νμ¬ RAII λ°©μμΌλ‘ Lock μ κ±Έμ΄ μ£Όλ κ²μ΄ μ’λ€. 3. unique_lock μ κ²½μ°, defer_lock λ±μ μ΅μ μ μ£Όμ΄ Lock Guard λ₯Ό μ’ λ μ μ°νκ² μ¬μ©ν μ μλ€. λ€λ§ lock_guard μ λΉν΄ λ©λͺ¨λ¦¬λ₯Ό λ λ§μ΄ μ°¨μ§νκ³ λ¬΄κ±°μ κ²μ΄λ€. λ€μκ³Ό κ°μ΄ μ¬λ¬ μ°λ λλ₯Ό μ΄μ©ν΄ 벑ν°μ μμλ₯Ό μ½μ νλ€κ³ ν΄ λ³΄μ : vector vec; void Push() { for (int..
[C++ κ²μ μλ²] 1-3. atomic μ λνμ¬ ν΅μ¬ : 1. ++, -- κ°μ κ°λ¨ν μ°μ°μ‘°μ°¨, μ¬μ€ μ΄μ λΈλ¦¬μ΄μμλ 'κ° λ³΅μ¬' -> '볡μ¬λ κ°μ μ°μ° μν' -> '볡μ¬λ κ°μ λ€μ λμ ' κ°μ κ³Όμ μΌλ‘ μͺΌκ°μ§λ€ 2. λ§μ½ νΉμ μ°μ°μ΄ μ§ν μ€μΌ κ²½μ°, λ€λ₯Έ μ°μ°μ΄ λΌμ΄λ€μ§ μλλ‘ λ§λ€κ³ μΆλ€λ©΄, ν΄λΉ λ³μλ₯Ό atomic μΌλ‘ μ μΈν μ μλ€. 3. μΌλ°μ μΌλ‘ atomic μ°μ°μ μΌλ° μ°μ°λ³΄λ€ λ리λ―λ‘, λ¨μ©μ μ§μνμ¬μΌ νλ€. μ΄λ€ μ°μ°μ΄ atomic (μμμ ) μΌλ‘ μ΄λ£¨μ΄μ§λ€λ κ²μ, ν΄λΉ μ°μ°μ΄ μ§νλλ μ€κ°μ λ€λ₯Έ μ°μ°μ΄ λμμ μ§νλμ§ μλλ€λ κ²μ μλ―Ένλ€. μ΄μ μ μ¬λ¬ μ°λ λλ€μ΄ 곡μ μμμ μ κ·Όνλ € ν λ Race Condition μ΄ λ°μν μ μλ€κ³ μ΄μΌκΈ°ν μ μ΄ μλλ°, ..
μ°λ λ μμ± ν΅μ¬ : 1. μ°λ λλ₯Ό μμ±νλ λ°©λ²μ κ°λ¨νλ€. κ·Έλ₯ std::thread μ μλ§μ ν¨μλ₯Ό λ£μ΄μ£ΌκΈ°λ§ νλ©΄ λλ€. 2. μ°λ λλ₯Ό λ«μμ€ λλ join μΌλ‘ λ«μμ£Όλ©΄ λλ€! λ«κΈ° μ , joinable λ‘ join κ°λ₯νμ§λ₯Ό 체ν¬νλ€. 3. μ°λ λ κ°μ²΄ μμ± μ, ν¨μμ μΈμμ λ§κ² κ°―μλ₯Ό λ£μ΄μ£Όμ΄μΌ μ λμν κ²μ΄λ€. μ°λ λ κ°μ²΄ μμ±μ λ΄λΆλ κ°λ³ κΈΈμ΄ ν νλ¦ΏμΌλ‘ ꡬνλμ΄ μλ€. μ΄μ μ°λ λλ₯Ό μμ±νλ κΈ°μ΄μ μΈ μ€μ΅λΆν° μ§νν΄ λ³΄μ π #include "pch.h" #include #include "CorePch.h" #include #include #include #include using namespace std; void HelloThread() { cout
[C++ κ²μ μλ²] 1-1. λ©ν°μ°λ λ κ°λ‘ ν΅μ¬ : 1. λ©ν°μ°λ λ νλ‘κ·Έλλ°μ μλΉμ μ΄μνλ κ²κ³Ό λΉμ·νλ€. ν μ΄λΈμ νλ‘μΈμ€, ν μ΄λΈμμ μΌνλ μ§μμ μ°λ λ, μνΌμ μ½μ΄λΌκ³ μκ°νλ©΄ νΈνλ€. 2. μ°λ λλ ν μμμ 곡μ νμ§λ§, κ°κ°μ μ 보λ₯Ό μ€νμ μ μ₯νλ€. λ°λΌμ ν μμμ μ κ·Όν λλ Race Condition μ΄ λ°μν μ μλ€. λ©ν°μ°λ λ νλ‘κ·Έλλ°μ μλΉμ μ΄μνλ κ²κ³Ό λΉμ·νλ€. ν μ΄λΈμ νλ‘κ·Έλ¨, μ§μμ μ°λ λ, μνΌμ CPU μ½μ΄λΌκ³ μκ°νμ. κ·ΈλΌ μνΌμ΄ μ§μμκ² λ€μ΄κ°μΌ νλ‘κ·Έλ¨μ΄ λμκ° κ²μ΄λ€. μ΄μ μ°λ¦¬κ° ν΄μΌ ν μΌμ, μνΌμ μ§μμκ² μ΄λ»κ² λΆλ°°ν΄μΌ μ’μμ§ κ΅¬μ‘°λ₯Ό μ€κ³νκ³ μ½λλ₯Ό μ§λ κ²μ΄λ€! μ€μ λ‘ μμ μ€μ·μ²λΌ, CPU μ½μ΄λ₯Ό μ μ ν λ°°λΆνλ©΄μ μκΈ°λ λ¬Έμ λ₯Ό μ..
[μΈλ¦¬μΌ] μ€ν¬λ‘€λ°μ€μμ μΌμͺ½ ν΄λ¦μΌλ‘ λλκ·ΈνκΈ° ν΅μ¬ : 1. UScrollBox μμλ κΈ°λ³Έμ μΌλ‘λ μ€λ₯Έμͺ½ ν΄λ¦μ ν΅ν΄ μ‘μλκΈ°(λ§μ°μ€ ν΄λ¦μΌλ‘ λλκ·Έ) κ° κ°λ₯νλ€. 2. μ’ν΄λ¦μΌλ‘ λλκ·Έλ₯Ό νμ±ν νλ €λ©΄, νμ μμ ―μ λ²νΌμ λ£κ³ , λ²νΌμμ Click Method / Touch Method μ€μ μ κ°κ° Precise Click, Precise Tap μΌλ‘ λ°κΎΈμ΄ μ£Όλ©΄ λλ€. 3. μμΈν κ²μ μμ μ°Έμ‘°. UScrollBox μμ μ’ν΄λ¦μΌλ‘ μ€ν¬λ‘€μ νκ³ μΆμΌλ©΄, UScrollBox μλμ λ²νΌμ λ§λ€κ³ , λ²νΌμ μμ±μ μμ κ°μ΄ λ³κ²½ν΄ μ£Όλ©΄ λλ€. μ°Έκ³ λ‘, Horizontal νκ² μμ΄ν μ λ΄μ λλ WrapBox λ₯Ό, Vertical νκ² μμ΄ν μ λ΄μ λλ VerticalBox λ₯Ό UScrol..
[μΈλ¦¬μΌ] UnrealVS λ‘ λ©λͺ¨λ¦¬ μ΄μ μλ°©νκΈ° (-stompMalloc) ν΅μ¬ : 1. Stomp Allocator λ‘ μ μ¬μ μΈ λ©λͺ¨λ¦¬ μ΄μλ₯Ό μ‘μλΌ μ μλ€. 2. λ°μΈλ©μ 꼬리물기μ²λΌ λ§λ€λ©΄ μλλ€(μμ > μ€μ > νμ μμ ― μμΌλ‘ μ΄λ¦¬λ κ²½μ°, κ°μ νμ μ λΈλ¦¬κ²μ΄νΈκ° λ°μΈλ©λλ©΄ μλ¨) 3. stompmalloc μ μ€μ κ°μ λ©λͺ¨λ¦¬ λμ 물리 λ©λͺ¨λ¦¬ μ£Όμμ ν λΉ/ν΄μ μμ μ μ§μ μ μΌλ‘ νλλ‘ λμμ€λ€. κ²μμ λ€ λ§λ€κ³ λμ μ€νμ νλλ°, μκΎΈ ν¬λμκ° λμ κ²μμ΄ κΊΌμ Έλ²λ¦¬λ©΄ λ§€μ° νλ§ν κ²μ΄λ€. νΉν λ©λͺ¨λ¦¬ μ΄μμ κ²½μ°, μ νν μ΄λμ λ©λͺ¨λ¦¬κ° μ€μΌλμλμ§ κ°λ° λ¨κ³μμλ νμ νκΈ°κ° λ§€μ° μ΄λ ΅κ³ ν μ€νΈ λΉμ©μ΄ ν° νΈμ΄λ€. λ©λͺ¨λ¦¬ μ΄μλ₯Ό λλ²κΉ νκΈ° μν μ’μ λ°©λ²μ΄ νλ μλλ°, λ°λ‘ U..
μΈλ¦¬μΌμμ TMap μ Compare Functor μ§μ νκΈ° ν΅μ¬ : 1. C++ μμλ Functor class λ₯Ό λ£μ΄ μ£ΌκΈ°λ§ νλ©΄ λλ€. 2. TMap μμλ TMap μμ²΄κ° κ·Έλ₯ unordered_map μ΄λΌ κ·Έλ° κ±΄ μλ€. λ§μ½ Predicate λ₯Ό μ§μ νκ³ μΆμΌλ©΄, TSortedMap μ μ¬μ©νμ! 3. TMap μ μ λ ¬ν λλ Sort λ₯Ό μ¬μ©νμ... ν... C++ μμλ TMap μμ Key κ°μ μ΄μ©ν μ λ ¬μ μμμΌλ‘ νκ³ μΆμ λ, std::less λ std::greater κ°μ predicate ν΄λμ€λ₯Ό μ¬μ©νλ€. νΉμ μλμ κ°μ΄ Functor class λ₯Ό λ§λ€μ΄ 3λ²μ§Έ μΈμμ λ£μ΄ μ£ΌκΈ°λ§ νλ©΄ λμλλ°... #include #include #include class MyCo..