2013-11-27 8 views
0

에 도달하기 전에 : pthread_join에 도달 pthread_exitmain 전에가 pthread_exit()는이 코드 조각을 갖는 pthread_join을 호출

#include <pthread.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 

void* PrintHello(void* data){ 

     printf("Hello from new thread\n"); 
     pthread_exit(NULL); 

} 

int main(int argc, char* argv[]){ 
    int rc; 
    pthread_t thread_id; 
    T_DATA data; 

    Data = init_data(); 
    rc = pthread_create(&thread_id, NULL, PrintHello, (void*)data); 
    if(rc){ 
     printf("\n ERROR: return code from pthread_create is %d \n", rc); 
     exit(1); 
    } 
    sleep(100); 
    printf("\n Created new thread (%d) ... \n", thread_id); 
    pthread_join(thread_id); 
} 

main는 새로운 스레드를 만든 다음 sleep(100)을 수행, 새로운 스레드가 아마 도달한다. 어쨌든 main을 수행 할 때까지 새 스레드가 대기하고 그의 리소스가 해제되지 않으므로 ps 명령을 실행하면 다음 100 초 동안 새 스레드가 표시됩니다. pthread_detach 대신 pthread_join을 사용하면 동일한 동작이 발생합니까? 새 스레드가 수행하기 전에 pthread_exit을 수행 할 때 어떤 일이 발생하는지 궁금합니다. 스레드를 통해 pthread_detach을 수행하십시오.

답변

1

스레드가 종료 될 때까지 스레드를 정리할 수 없습니다. 그러나 연결되거나 분리 될 때까지는 정리할 수 없습니다. 분리되지 않고 종결되는 스레드는 다른 스레드가 결합 할 수 있도록 충분한 정보를 유지합니다.

+0

메인이'pthread_exit' 또는'pthread_detach'를 수행 할 때까지'ps'를 실행 한 후에 새로운 psth가 나타나기 시작하고 그 후에 ps 명령이 다시 나타나지 않을 것입니다. – MABC

+0

ps는 스레드가 아닌 프로세스를 나타냅니다. –

+0

@R .. 리눅스에서는'ps'도 쓰레드를 볼 수 있습니다. 'ps -H'. –