[06μ£Όμ°¨] λ©ν°μ°λ λ 01
- μ±λ₯ ν₯μ
1) νλ‘κ·Έλ¨ μ΅μ ν
2) λ©ν° μ½μ΄ νμ© β λ©ν°μ°λ λ νλ‘κ·Έλλ° νμ
- λ©ν°μ°λ λ
: νλμ νλ‘κ·Έλ¨μ΄ μ¬λ¬ κ³³μ΄ λμ λ€λ°μ μΌλ‘ μ€νλ¨ (λ³λ ¬μ²λ¦¬)
- λ³λ ¬μ²λ¦¬
: νλμ μμ μ μ¬λ¬ κ°μ contextμμ λμμ μν
: context - CPU μ€ν μν (PCλ₯Ό ν¬ν¨ν λͺ¨λ λ μ§μ€ν° κ°)
: ν λμ μ»΄ν¨ν° μ¬μ© β SMP(μ¬λ¬ κ°μ CPU), Multi-Core (μ¬λ¬ κ°μ Core)
: CPU ν κ° μλλ λ무 λ리기μ μ¬μ©νλ κ² (νλ‘κ·Έλ¨ κ΅¬μ‘°κ° κΉλν΄μ§μ§ μμ)
: λ°μ΄ μλμ λΆλͺμΉ ν΄λ μλ μ¦κ°
- νλ‘μΈμ€μ μ°λ λ
1) νλ‘μΈμ€ : μ€ν μ€μΈ νλ‘κ·Έλ¨ - νλμ νλ‘μΈμ€λ νλμ μ€ν νμΌμμ μΆλ°
2) μ°λ λ : νλ‘κ·Έλ¨ μ€ν νλ¦ - νλ‘μΈμ€ μ€ν μ€ νλ‘κ·Έλ¨μ΄ μ°λ λ μμ± λͺ λ Ήμ μ€ν

: νλ‘κ·Έλ¨μ νλμ νλ‘μΈμ€κ° λμ΄ μ€νλ¨
: μ²μμ νλμ μ°λ λλ‘ μ€ν, μ°λ λλ μ°λ λλ₯Ό λ§λ€ μ μμ
: κ°κ°μ μ°λ λλ μμ μ μ€ν κ°κ³ μκ³ , κ°μ νλ‘μΈμ€μ λͺ¨λ μ°λ λλ Data, Code, Heap 곡μ
- λ©ν°μ°λ λ
: λ©λͺ¨λ¦¬
1) μ μ λ³μ - λͺ¨λ μ°λ λκ° κ³΅μ
2) μ§μ λ³μ - μ°λ λλ§λ€ λ°λ‘
3) μ§μ λ³μλ κ°μ λ‘ κ³΅μ κ°λ₯ν¨ (κ·Έλ¬μ§ λ§μ)
: μμ(λ©λͺ¨λ¦¬, νμΌ νΈλ€ λ±)μ 곡μ λ¨
: μ₯μ - μ±λ₯ ν₯μ, λΉ λ₯Έ μλ΅ μλ, λ λμ μμ νμ©(CPU), νλ‘μΈμ€λ³΄λ€ ν¨μ¨μ (context switch)
: μν - νλ‘κ·Έλ¨ λ³΅μ‘λ μ¦κ°, λλ²κΉ μ΄λ €μ
: κ²μμλ²μμμ λ©ν° μ°λ λ - λμ ν₯μ, λΉ λ₯Έ μλ
: λ κ°μ§ μ€νμΌ μ‘΄μ¬
1) Heterogeneous - μμ μ μν λ³λ‘ λλμ΄μ μ μ© μ°λ λμκ² λ§κΉ β κ²μ ν΄λΌμ΄μΈνΈ
2) Homogeneous - μμ μ μͺΌκ°μ μ°λ λ κ΅¬λΆ μμ΄ λλ μ ν¨ β κ²μ μλ²
- κ²μ μλ²λ ν¨ν· νλλ₯Ό ν μ‘°κ°μ μμ μΌλ‘ μκ°
: μ£Όμμ
- μ°λ λ κ°μκ° λ§λ€κ³ μ’μ§ μμ
- νλ‘μΈμ / μ½μ΄ μμ λ§μΆμ΄λΌ (μ½μ΄λ³΄λ€ λ§μ μ°λ λ β context switching(λ¬Έλ§₯ κ΅ν) λΆν, λ°μμλ μ ν
- λ§μ μ°λ λ β OS/HW λΆλ΄
- λ΄κ° μ¬μ©νλ λ©λͺ¨λ¦¬μ λ΄μ©μ΄ λ€λ₯Έ μ°λ λμ μν΄ λ³κ²½ λ μ μμ (DataRace)
- λλ²κΉ μ μ΄λ €μ
// μ°λ λ λ§λ€κΈ°
// κ°μ²΄λ₯Ό μμ±νκ³ μμ±μ μ΄κΈ°κ°μΌλ‘ μ€νν ν¨μ λ£μ
#include <thread>
std::thread t1 { mythread };
// μ°λ λ μ’
λ£ κ²μ¬
// μμ μ°λ λλ₯Ό μμ±ν μ°λ λλ μμ±ν μ°λ λμ μ’
λ£λ₯Ό νμΈν΄μΌ ν¨
t1.join();
: DataRace - κ°μ λ©λͺ¨λ¦¬λ₯Ό ν κ° μ΄μμ μ°λ λκ° λμμ μ½κ³ μ°λ κ²½μ° (μ μ΄λ ν κ°λ λ°λμ μ°κΈ°)
: μ΄λ₯Ό ν΄κ²°νλ €λ©΄ ν λ²μ νλλ§ μνν μ μλλ‘ μ²λ¦¬
- Lock()/Unlock() β Mutexκ°μ²΄ (μ μλ³μ μ μΈ)
- κ°μ κ°μ²΄ μ¬μ΄μμλ§ λμ, μλ‘ λμμ μ€ν κ°λ₯ν ν¬λ¦¬ν°μ»¬ μΉμ μ λ€λ₯Έ mutex μ¬μ©
- λ¨μ : Lockμ λΆν, ν¬κΈ°(λ무 μμΌλ©΄ μμ£Ό νΈμΆλμ΄ μ±λ₯ μ ν, ν¬λ©΄ μ€λ«λμ λκΈ°νλ μ°λ λλ‘ μΈν΄ μ±λ₯ κ°μ)
: Lockμ κ°μ μ΅μν & λ³λ ¬ μν μ΅λν β μκ³ λ¦¬μ¦ μ¬μμ± νμ
: Atomic μλ£ κ΅¬μ‘°
- κ³ μ±λ₯ : μνΈλ°°μ μμ΄ λμ μ€ν
- Data Raceλ‘ μΈν μ€λμ μμ
- Queue, Stack .. λ± λ€μν μλ£κ΅¬μ‘°