스레드 조건 변수

OS/리눅스 & 유닉스 2012. 5. 21. 20:50

스레드 조건 변수

- 뮤텍스의 경우, 내부에서 조건에 따른 lock과 unlock을 수행하기 어려움. 다른 스레드가 언제 뮤텍스를 해제했는지 시점 확인도 어려움.-> 이를 조건에 따라 뮤텍스를 잠그고 해제 하고 시그널을 이용해서 뮤텍스가 해제되었음을 다른 스레드에게 알릴 수 있다면?

- pthread_cond: 시그널을 발생시키거나 시그널을 기다리는 기능 제공. (주의: 여기서 언급하는 시그널은 프로세스가 사용하는 일반적인 의미와는 다름)


- 초기화

pthread_cond_t condT;

pthread_cond_t condT = PTHREAD_COND_INITIALIZER;

pthread_cond_init(&condT);


- (해당 스레드 조건변수에게)시그널을 보내는 함수

int ptrhead_cond_signal(pthread_cond_t* condT); // 해당되는 스레드에게만 시그널 전송

int pthread_cond_broadcast(pthread_cond_t* condT); // 모든 스레드에게 시그널을 전송

: 수신 대기중인 스레드가 없을 경우, 시그널은 무시됨


- 전송될 시그널을 대기하는 함수

pthread_cond_wait(pthread_cond_t* , pthread_mutex_t* );

pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, const struct timespec*);

:조건 변수와 뮤텍스 모두를 인수로 사용. 즉, 뮤텍스가 초기화되어 있고 lock이 되어있어야 함. wait()함수가 실행되면 함수는 내부에 사용된 뮤텍스의 lock을 해제한채로 대기작업에 들어감.그리고 조건 변수에 대한 시그널이 검출되면 작업을 재개.(즉, 해당조건변수에 대한 시그널이 발생하면 내부의 인수로 지정된 뮤텍스를 잠근 후,  wait()함수의 다음라인을 실행)


- 조건 변수 제거

int prhead_cond_destroy(pthread_cond_t*);


소스 : http://pds18.egloos.com/pds/201103/05/62/e0036962_4d721a5839bc2.png



출처 - http://avata007.egloos.com/2724595

: