티스토리 뷰


pthread_cond_wait는 thread를 휴먼 상태로 만듭니다(해당 라인에서 thread의 동작이 멈추는 상태). 이 말은, 일종의 sleep 상태라고 생각해도 되는데, 휴먼 상태에 빠져 있는 이 thread는 다른 thread에서 pthread_cond_signal을 이용해서 깨웁니다 (깨워지게 되면, 그때 부터 pthread_cond_wait 의 다음 라인 코드가 실행됩니다). 그렇다면 다수의 pthread_cond_wait가 존재한다면, pthread_cond_signal은 어떤 pthread_cond_wait를 깨울까요?

답은 아래 있습니다. 일단 함수 생김새를 살펴보면 아래와 같고,

int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *cond, pthread_condattr_t *cond_attr);



pthread_cond_t는 여러 thread에서 사용 될 수 있는 pthread_cond_wait/pthread_cond_signal의 구분자 정도로 생각하면 되는데, 간략하게 설명하자면, pthread_cond_signal()은 조건변수 cond에 signal을 보내서 pthread_cond_wait() 상태의 thread를 깨우게 됩니다.

좀더 쉽게 말하면, pthread_cond_signal(A)는 pthread_cond_wait(A, mutex) 처럼, A는 A를 깨우게 되는 그림입니다. 이외에도 pthread_cond_broadcast (cond에 대해 모든 thread를 깨움), pthread_cond_timedwait(제한시간이 지날 때까지 signal이 전송되지 않을 경우 리턴) 등 유용한 함수들이 존재합니다. 

 

'개발 > Linux' 카테고리의 다른 글

struct size의 오해와 진실...  (0) 2011.08.25
전처리문 - #ifdef AND ...  (0) 2011.08.17
pthread_cond_wait, pthread_cond_signal  (0) 2011.08.17
tar compress/decompress  (0) 2011.08.08
커널 코딩시 디버깅 팁  (0) 2011.08.08
iptalbes(8) - Linux man page  (0) 2011.08.08
댓글
댓글쓰기 폼