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문으로 감싼게 의아해서 찾아보고 정리해봤다.
왜 while문이 사용되는지에 대한 이유는, "spurious wakeups" 현상때문이라고 한다.
사용자가 행하지 않았지만 내부 라이브러리나 os의 실행으로 인해 갑자기 깨어날 수 있다고 한다.
즉, 쓰레드가 신호를 받아서 깨어난 경우에도 조건이 여전히 충족되었는지 확인하기 위해 while문을 이용해 체크했던 것이다.
만약 사용자가 깨운것이 아니라면 다시 wait함수를 실행하며 시그널을 기다린다.