🌐 CS:APP | λ©”λͺ¨λ¦¬ 곡간 곡유

μ΄μˆœκ°„Β·2025λ…„ 3μ›” 27일

CS:APP

λͺ©λ‘ 보기
14/23

🧡 CS:APP | λ©€ν‹°μŠ€λ ˆλ”©μ—μ„œ β€œλ©”λͺ¨λ¦¬ 곡간을 κ³΅μœ ν•œλ‹€β€λŠ” κ²ƒμ˜ 의미


βœ… 핡심 μ •μ˜

λ©€ν‹°μŠ€λ ˆλ”©μ΄λž€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” 것이며,
μ΄λ•Œ μŠ€λ ˆλ“œλ“€μ€ ν•˜λ‚˜μ˜ 곡톡 λ©”λͺ¨λ¦¬ 곡간을 κ³΅μœ ν•œλ‹€.


πŸ“¦ ꡬ체적으둜 μ–΄λ–€ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν• κΉŒ?

πŸ”— μŠ€λ ˆλ“œλΌλ¦¬ κ³΅μœ λ˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­

λ©”λͺ¨λ¦¬ μ˜μ—­μ„€λͺ…κ³΅μœ  μ—¬λΆ€
μ½”λ“œ μ˜μ—­ (text)μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨ λͺ…λ Ήμ–΄βœ… 곡유
데이터 μ˜μ—­ (global, static)μ „μ—­ λ³€μˆ˜, static λ³€μˆ˜ λ“±βœ… 곡유
νž™ μ˜μ—­ (heap)동적 ν• λ‹Ή λ©”λͺ¨λ¦¬ (예: malloc, new)βœ… 곡유
μŠ€νƒ μ˜μ—­ (stack)μ§€μ—­ λ³€μˆ˜, ν•¨μˆ˜ 호좜 정보 λ“±βŒ μŠ€λ ˆλ“œλ§ˆλ‹€ 독립

🧠 즉, 곡톡 μ½”λ“œ/데이터/νž™μ€ 곡유, μŠ€νƒμ€ κ°œλ³„μ μœΌλ‘œ 가짐


πŸ–₯️ 그림으둜 μ΄ν•΄ν•˜κΈ°

[ ν”„λ‘œμ„ΈμŠ€ ν•˜λ‚˜ ]
β”œβ”€ 곡유: μ½”λ“œ, 데이터, νž™
β”‚
β”œβ”€ μŠ€λ ˆλ“œ A ── Stack A
β”œβ”€ μŠ€λ ˆλ“œ B ── Stack B
└─ μŠ€λ ˆλ“œ C ── Stack C
  • λͺ¨λ“  μŠ€λ ˆλ“œλŠ” 같은 νž™μ— μ ‘κ·Ό κ°€λŠ₯ (ex: 곡톡 리슀트 μ‚¬μš©)
  • 각 μŠ€λ ˆλ“œλŠ” 자기만의 μŠ€νƒμ„ 가짐 (ex: ν•¨μˆ˜μ˜ μ§€μ—­ λ³€μˆ˜λŠ” 좩돌 μ•ˆ 남)

⚠️ 곡유 λ©”λͺ¨λ¦¬μ˜ μž₯점과 단점

μž₯점단점
데이터 전달이 빠름 (볡사 ν•„μš” μ—†μŒ)경쟁 쑰건(race condition) λ°œμƒ κ°€λŠ₯
곡간 효율적 (λ¦¬μ†ŒμŠ€ μ ˆμ•½)동기화 ν•„μš” (mutex, lock λ“±)
ν˜‘μ—… ꡬ쑰 λ§Œλ“€κΈ° μ’‹μŒλ²„κ·Έ 좔적이 어렀움

🧠 μ˜ˆμ‹œ μ½”λ“œ (Python)

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)에 μ ‘κ·Ό = 곡유 λ©”λͺ¨λ¦¬


βœ… ν•œ 쀄 μš”μ•½

λ©€ν‹°μŠ€λ ˆλ”©μ€ 같은 ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—, μ½”λ“œ/데이터/νž™ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜λ©°, 이둜 인해 λΉ λ₯Έ 톡신이 κ°€λŠ₯ν•˜μ§€λ§Œ 동기화 λ¬Έμ œλ„ ν•¨κ»˜ λ°œμƒν•œλ‹€.

profile
μ„œνˆ΄μ§€μ–Έμ • 늘 행동이 먼저이기λ₯Ό

0개의 λŒ“κΈ€