pthread_cond_signal 관련 질문입니다..
글쓴이: kealyung / 작성시간: 토, 2007/11/24 - 11:34오후
Object::wait() { lock(); pthread_cond_wait(); if(queue.empty()==false) { queue.pop(); } else { cout << "queue is empty" << endl; } unlock(); } Object::signal() { lock(); queue.push(); pthread_cond_siganl(); unlock(); }
대충 이런식의 구조입니다. 이런 상태에서
for(int i=0;i<100;i++)
Object->signal();
이렇게 signal을 호출했을때..
queue의 사이즈가 0이 되어야 하는데
0이 되는 경우도 있고 되지 않는 경우도 발생을 하고 있네요..
thread 갯수를 많이 잡으면 잡을수록 queue가 0이 되는 경우가 많아지고
thread의 갯수가 적으면 적을수록 queue의 갯수가 남이 남게 되네요..
어느쪽에서 제가 잘못한건가요?
Forums:
일반적으로
일반적으로 pthread_cond_wait은 루프 안에서 호출합니다.
그 이유는 spurious wakeup이 발생할 수 있기 때문입니다.
간단히 말하자면 원하는 조건이 되지 않았는데도 pthread_cond_wait이 return하는 경우가 있다는 것입니다.
자세한 내용은 http://en.wikipedia.org/wiki/Spurious_wakeup 을 참고하세요.
댓글 달기