조건 변수란?
조건 변수(Condition Variable)는 공유 자원의 상태가 어떤 조건을 만족할 때까지 쓰레드를 기다리게 하거나, 그 조건이 만족되면 다른 쓰레드를 깨우는 동기화 도구다.
조건 변수의 동작 구조
조건 변수는 반드시 mutex와 함께 사용된다.
전형적인 흐름
1. 쓰레드 A:
pthread_mutex_lock(&mutex);
while (조건이 false)
pthread_cond_wait(&cond, &mutex); // 대기 상태 진입
// 조건이 만족되면 계속 진행
pthread_mutex_unlock(&mutex);
2. 쓰레드 B (조건 만족시키는 측):
pthread_mutex_lock(&mutex);
// 조건을 true로 만드는 작업
pthread_cond_signal(&cond); // A를 깨움
pthread_mutex_unlock(&mutex);
관련 함수 설명
1. pthread_cond_t 선언
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
2. pthread_cond_init
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
- 조건 변수 초기화. attr은 NULL로 보통 사용
3. pthread_cond_wait
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
- 호출한 쓰레드는 조건 변수 cond에서 기다림
- 내부적으로 mutex는 자동으로 unlock 됨
- 다른 쓰레드가 signal 하거나 broadcast 할 때까지 블로킹
- 깨어나면 다시 mutex를 lock 한 상태로 돌아옴
주의: 항상 while (조건이 false) 루프 안에서 써야 함.
→ spurious wakeup (가짜 깨움) 방지를 위해
4. pthread_cond_signal
int pthread_cond_signal(pthread_cond_t *cond);
- 조건 변수에서 기다리는 쓰레드 중 하나를 깨움
5. pthread_cond_broadcast
int pthread_cond_broadcast(pthread_cond_t *cond);
- 기다리는 모든 쓰레드를 깨움 (ex: 생산자/소비자 모델에서 필요)
6. pthread_cond_destroy
int pthread_cond_destroy(pthread_cond_t *cond);
조건 변수 해제. pthread_cond_init로 만든 경우 반드시 호출
'Deep Dive > CS' 카테고리의 다른 글
[CS] HTTP (요청/응답, 헤더, 메소드, 상태코드, HEAD 메소드) (0) | 2025.05.05 |
---|---|
[CS] OSI 7계층 모델 (0) | 2025.05.04 |
[Deep Dive] 쓰레드와 병렬 프로그래밍 - 4탄 동기화 기법 : 읽기/쓰기 락 (Read-Write Lock) (1) | 2025.05.03 |
[Deep Dive] 쓰레드와 병렬 프로그래밍 - 2탄 동기화 기법 Mutex (0) | 2025.05.03 |
[Deep Dive] 쓰레드와 병렬 프로그래밍 - 1탄 개념 이해 (0) | 2025.05.03 |