조건변수

System Program/mutex 2014. 3. 10. 21:41

1. 조건 변수

 

조건 변수는 항상 뮤텍스와 함께 사용된다. 뮤텍스에 대한 보조적인 역활을 한다고 생각한다.

뮤텍스는 공유 변수에 대한 상호 배제를 제공하는 한편, 조건 변수는 어떤 상태 변화를

쓰레간에 보내면서 더 정교한 상호 배제를 제공할 수 있다.

 

2. 정적 조건 변수 초기화

 

데이터형은 pthread_cond_t 이다. 뮤텍스 정적 초기화 구문과 같다.

 

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

 

3. 조건 변수 대기와 시그널

 

조건 변수는 하나 이상 쓰레드가 조건 변수 상태 변화를 기다리고 있을 때, 조건 변수의 상태를 알리는

시그널을 보낸다. 여기서 시그널은 일반적인 프로세스와 쓰레드에서 사용되는 시그널이 아니다.

따라서 조건 변수의 상태를 알리는 행위를 시그널을 보낸다라고 하고,

조건 변수의 상태를 기다리는 쪽에서 행위를 대기라 명한다.

 

#include <pthread.h>

 

int pthread_cond_signal(pthread_cond_t *cond);

int pthread_cond_broadcast(pthread_cond_t *cond);

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);

int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);

 

성공하면 '0'을 리턴하고, 에러가 발생하면 에러번호 (양수)를 리턴한다. 

 

 

pthread_cond_signal() 함수와 pthread_cond_broadcast() 모두 cond로 지정된 조건 변수에

시그널을 보낼 수 있다. pthread_cond_wait() 함수는 조건 변수 상태 변화를 기다리면서 대기한다.

시그널 전송 두 함수의 차이는 pthread_cond_wait()가 여러 쓰레드에서 블록되어 대기 중 일 때 차이가 난다.

pthread_cond_signal() 함수는 최소 하나의 쓰레드가 깨어 난다는 것만 보장하는

반면 다른 함수는 모든 쓰레드가 깨어나기를 보증한다.

 

4. 동적 조건 변수 할당 및 제거 함수

 

#include <pthread.h>

 

int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);

int pthread_cond_destroy(pthread_cond_t *cond); 

 

성공하면 '0'을 리턴하고, 에러가 발생하면 에러번호 (양수)를 리턴한다. 

 

 

위 함수의 사용법과 동작 기법은 동적 뮤텍스 사용법과 같다. 따라서 구체적인 사용법은 메뉴얼 또는

동적 뮤텍스 속성 부분을 참조바람.

 

 

'System Program > mutex' 카테고리의 다른 글

정적 뮤텍스  (0) 2014.03.10
동적 뮤텍스  (0) 2013.07.04
: