condition variable 의문

jh Seo·2023년 12월 19일
0

운영체제

목록 보기
1/1

개요

c언어를 이용해 pThread공부를 하는 중이다.

pthread_mutex_lock(&mutex);
while(condition_is_false)
	pthread_cond_wait(&cond,&mutex);
    
    ```실행할 코드
pthread_mutex_unlock(&mutex);

이런식으로 pthread_cond_wait에 while문으로 감싼 부분이 잘 이해가 안 갔다.
어차피 pthread_cond_signal함수를 사용하면 깨어나는 데 굳이 while문으로 감싼게 의아해서 찾아보고 정리해봤다.

why

왜 while문이 사용되는지에 대한 이유는, "spurious wakeups" 현상때문이라고 한다.
사용자가 행하지 않았지만 내부 라이브러리나 os의 실행으로 인해 갑자기 깨어날 수 있다고 한다.

즉, 쓰레드가 신호를 받아서 깨어난 경우에도 조건이 여전히 충족되었는지 확인하기 위해 while문을 이용해 체크했던 것이다.

만약 사용자가 깨운것이 아니라면 다시 wait함수를 실행하며 시그널을 기다린다.

profile
코딩 창고!

0개의 댓글