λ©ν°μ€λ λ©μ΄λ νλμ νλ‘μΈμ€ μμμ μ¬λ¬ κ°μ μ€λ λκ° λμμ μ€νλλ κ²μ΄λ©°,
μ΄λ μ€λ λλ€μ νλμ κ³΅ν΅ λ©λͺ¨λ¦¬ 곡κ°μ 곡μ νλ€.
| λ©λͺ¨λ¦¬ μμ | μ€λͺ | 곡μ μ¬λΆ |
|---|---|---|
| μ½λ μμ (text) | μ€νν νλ‘κ·Έλ¨ λͺ λ Ήμ΄ | β 곡μ |
| λ°μ΄ν° μμ (global, static) | μ μ λ³μ, static λ³μ λ± | β 곡μ |
| ν μμ (heap) | λμ ν λΉ λ©λͺ¨λ¦¬ (μ: malloc, new) | β 곡μ |
| μ€ν μμ (stack) | μ§μ λ³μ, ν¨μ νΈμΆ μ 보 λ± | β μ€λ λλ§λ€ λ 립 |
π§ μ¦, κ³΅ν΅ μ½λ/λ°μ΄ν°/νμ 곡μ , μ€νμ κ°λ³μ μΌλ‘ κ°μ§
[ νλ‘μΈμ€ νλ ]
ββ 곡μ : μ½λ, λ°μ΄ν°, ν
β
ββ μ€λ λ A ββ Stack A
ββ μ€λ λ B ββ Stack B
ββ μ€λ λ C ββ Stack C
| μ₯μ | λ¨μ |
|---|---|
| λ°μ΄ν° μ λ¬μ΄ λΉ λ¦ (λ³΅μ¬ νμ μμ) | κ²½μ 쑰건(race condition) λ°μ κ°λ₯ |
| κ³΅κ° ν¨μ¨μ (리μμ€ μ μ½) | λκΈ°ν νμ (mutex, lock λ±) |
| νμ ꡬ쑰 λ§λ€κΈ° μ’μ | λ²κ·Έ μΆμ μ΄ μ΄λ €μ |
import threading
shared_data = []
def worker():
for _ in range(1000):
shared_data.append(1) # 곡μ λ 리μ€νΈμ λμμ μ κ·Ό
threads = [threading.Thread(target=worker) for _ in range(4)]
for t in threads:
t.start()
for t in threads:
t.join()
print(len(shared_data)) # μμλ³΄λ€ μμ μ μμ (κ²½μ 쑰건 λ°μ!)
β λͺ¨λ μ€λ λκ° λμΌν 리μ€νΈ(shared_data)μ μ κ·Ό = 곡μ λ©λͺ¨λ¦¬
λ©ν°μ€λ λ©μ κ°μ νλ‘μΈμ€ μμμ μ€νλκΈ° λλ¬Έμ, μ½λ/λ°μ΄ν°/ν λ©λͺ¨λ¦¬λ₯Ό 곡μ νλ©°, μ΄λ‘ μΈν΄ λΉ λ₯Έ ν΅μ μ΄ κ°λ₯νμ§λ§ λκΈ°ν λ¬Έμ λ ν¨κ» λ°μνλ€.