PTHREAD 블럭킹
글쓴이: dotri / 작성시간: 토, 2005/04/09 - 1:31오후
pthread_create() 함수로 쓰레드를 생성합니다.
if( bActive == FALSE ) { bActive = TRUE; pthread_create( &hThread, NULL, ClientControlThread, TempClient ); } else { continue; }
플래그를 하나 두어서, 동시에 하나의 쓰레드만 실행될 수 있게 했습니다. 다음은 쓰레드 함수 ClientControlThread() 함수의 일부입니다.
void *ClientControlThread( void *param ) { // ... 어떤 처리 bActive = FALSE; // 쓰레드 종료할때 플래그를 원위치 pthread_exit( NULL ); // 쓰레드 종료 return NULL; // 문법상 함수 종료 }
그런데.. 문제는 이런식으로 쓰레드를 생성하고, 죽이고, 생성하고, 죽이고 하는 과정을 몇번인가 반복하다보면.. 어느 순간에 pthread_create() 함수가 블럭을 걸어버립니다. 엄밀히 말하면.. pthread_create() 함수는 리턴하는데, 쓰레드 생성이 안됩니다. 왜 이런 현상이 나타나나요?
Forums:
기본적으로 한번에 하나의 쓰레드만 만들려면, 쓰레드를 쓸 필요 자체가 없
기본적으로 한번에 하나의 쓰레드만 만들려면, 쓰레드를 쓸 필요 자체가 없긴 합니다만..., 위와 같은 플래그로는 한번에 하나의 쓰레드만 생성되라는 보장을 할 수도 없습니다. 뮤텍스를 사용하거나, pthread_join()으로 완료되는걸 기다리는게 정상이겠지요.
일단 원인을 찾자면, pthread_create()가 리턴한다고 해도, 쓰레드가 꼭 생성되는게 아닙니다. 반환값을 확인해보세요. EAGAIN이나 EINVAL을 반환할 가능성이 존재합니다.
댓글 달기