반응형
Event (이벤트 객체)
- 설명: 특정 조건이 충족될 때까지 스레드들을 대기시키거나, 시그널을 보내서 깨어나게 하는 도구.
- 특징:
- CreateEvent, SetEvent, ResetEvent, WaitForSingleObject 등 사용
- Manual-reset / Auto-reset 방식 제공
- 활용 예시:
- "리소스 로딩 끝날 때까지 기다려!" 같은 상황
- Producer-Consumer 패턴에서 유용
Semaphore (세마포어)
- 설명: 동시에 접근 가능한 스레드 개수를 제한하는 도구.
- 특징:
- 카운터 기반 → 0이면 대기, 양수면 접근 허용
- CreateSemaphore, ReleaseSemaphore 등 사용
- 활용 예시:
- 동시에 5개의 스레드만 DB 연결 풀을 사용할 수 있도록 제한
Condition Variable (조건 변수)
- 설명: SRWLock이나 Critical Section과 함께 사용, 특정 조건이 만족될 때까지 스레드 대기.
- 특징:
- SleepConditionVariableCS, SleepConditionVariableSRW 등 제공
- WakeConditionVariable, WakeAllConditionVariable로 깨움
- 활용 예시:
- "큐가 비어 있으면 기다렸다가, 새 데이터 들어오면 깨어나 처리"
Interlocked 함수 (원자적 연산)
- 설명: 별도 락 없이도 CPU 차원에서 보장되는 원자적 연산.
- 예시 함수:
- InterlockedIncrement, InterlockedDecrement, InterlockedCompareExchange
- 특징:
- 가장 가볍고 빠름
- 단순 카운터, 플래그, 참조 횟수 관리에 적합
Spin Lock
- 설명: 대기 중에 스레드가 Sleep 없이 계속 CPU를 돌면서 락이 풀릴 때까지 기다림.
- 특징:
- 컨텍스트 스위치가 발생하지 않아, 짧은 시간 잠금 상황에서 유리
- 하지만 장시간 대기 시 CPU 낭비 심함
- Windows에서는 KeAcquireSpinLock 같은 커널 API도 있지만, 유저 모드에서는 std::atomic_flag 같은 걸로 구현 가능
Slim Tools (C++11 이후 표준 라이브러리)
- std::mutex
- std::recursive_mutex
- std::shared_mutex (C++17) → SRWLock과 비슷한 Reader/Writer 락
- std::condition_variable
- 특징:
- 플랫폼 독립적이라 크로스플랫폼 엔진 개발 시 사실상 표준
- 내부적으로 Windows에서는 SRWLock이나 Critical Section을 이용
반응형
'서버 개발 > 멀티쓰레드 프로그래밍' 카테고리의 다른 글
ABA 문제와 사례 (0) | 2025.09.18 |
---|---|
SRWLock / Critical Section / Mutex 장단점 비교 (0) | 2025.09.18 |
Epoch-based Reclamation (EBR, 시기 기반 메모리 회수) (0) | 2025.09.18 |
위험 포인터(Hazard Pointer) (0) | 2025.09.18 |