gcc 4.6.0 c89은 pthread_exit 및 pthread_join을 사용합니다. pthread_exit가 호출하는 함수를 종료하지 않습니다.
단지 pthread_exit 및 pthread_join을 사용하여 실험하고 있습니다.
pthread_exit에서 주 메시지가 표시되기 전에 인쇄 메시지를 표시하지 않는다는 사실을 알게되었습니다. 그러나, pthread_join은 정확하게 그것을했습니다.
print 문이 표시되어야한다고 생각했을 것입니다. 그렇지 않다면 pthread_exit를 사용할 때 주 프로그램이 올바르게 종료되지 않았습니까? 어떤 제안에 대한
많은 감사,
내 소스 코드의 source.c 파일 :void* process_events(void)
{
app_running = TRUE;
int counter = 0;
while(app_running) {
#define TIMEOUT 3000000
printf("Sleeping.....\n");
usleep(TIMEOUT);
if(counter++ == 2) {
app_running = FALSE;
}
}
printf("Finished process events\n");
return NULL;
}
소스 코드 조각을 main.c 파일 : 당신이
int main(void)
{
pthread_t th_id = 0;
int th_rc = 0;
th_rc = pthread_create(&th_id, NULL, (void*)process_events, NULL);
if(th_rc == -1) {
fprintf(stderr, "Cannot create thread [ %s ]\n", strerror(errno));
return -1;
}
/*
* Test with pthread_exit and pthread_join
*/
/* pthread_exit(NULL); */
if(pthread_join(th_id, NULL) == -1) {
fprintf(stderr, "Failed to join thread [ %s ]", strerror(errno));
return -1;
}
printf("Program Terminated\n");
return 0;
}
Hello Mat, 답변 해 주셔서 감사합니다. 나는 당신이 어떤 작업을 수행하기를 원한다면 pthread_exit를 호출하기 전에 수행되어야한다고 생각합니다. – ant2009
'pthread_exit'는 (마지막 스레드의 종료로 인해) 전체 프로세스가 종료되지 않는 한 종료 핸들러를 실행하지 않습니다. 그것은 취소 클린업 핸들러와 스레드 특정 데이터 소멸자를 실행합니다. –