2011-04-24 2 views
1

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; 
} 

답변

1

을보고있는 무엇 예상된다. pthread_exit결코이 반환합니다. 즉각적으로 호출하는 스레드를 중지합니다 (존재하는 경우 클린업 처리기를 실행 한 다음 잠재적으로 스레드 특정 데이터 소멸자를 실행합니다).

main의 내용 중 pthread_exit이 실행되지 않습니다.

+0

Hello Mat, 답변 해 주셔서 감사합니다. 나는 당신이 어떤 작업을 수행하기를 원한다면 pthread_exit를 호출하기 전에 수행되어야한다고 생각합니다. – ant2009

+1

'pthread_exit'는 (마지막 스레드의 종료로 인해) 전체 프로세스가 종료되지 않는 한 종료 핸들러를 실행하지 않습니다. 그것은 취소 클린업 핸들러와 스레드 특정 데이터 소멸자를 실행합니다. –

관련 문제