在pthread_join调用之前到达pthread_exit()

时间:2013-11-27 00:52:58

标签: c linux multithreading pthreads uclibc

拥有这段代码:

#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)时,新主题可能会在pthread_exit到达main之前达到pthread_join。无论如何新线程等待并且他的资源在main执行pthread_join之前不会被释放所以如果我执行ps命令,我将在接下来的100秒内看到新线程,我是对的吗?如果我使用pthread_detach代替pthread_join,我会得到相同的行为吗?我想知道新线程在主线程执行pthread_exit之前执行pthread_detach时会发生什么。

1 个答案:

答案 0 :(得分:1)

当然,线程在终止之前无法清除。但是在加入或分离之前也无法清理它。在没有分离的情况下终止的线程将保留足够的信息以允许另一个线程加入它。