一尘不染

pthread_detach问题

linux

直到最近,我给人的印象是,如果在生成后“分离”线程,即使“主”线程终止后该线程仍然存在。

但是一个小实验(下面列出)违背了我的信念。我希望分离的线程即使在主终止后仍能继续打印“从分离的线程讲话”,但这似乎没有发生。该应用程序显然终止了…

“分离的”线程在“主要”问题 返回0 后会死吗?

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

void *func(void *data)
{
    while (1)
    {
        printf("Speaking from the detached thread...\n");
        sleep(5);
    }
    pthread_exit(NULL);
}

int main()
{
    pthread_t handle;
    if (!pthread_create(&handle, NULL, func, NULL))
    {
        printf("Thread create successfully !!!\n");
        if ( ! pthread_detach(handle) )
            printf("Thread detached successfully !!!\n");
    }

    sleep(5);
    printf("Main thread dying...\n");
    return 0;
}

阅读 233

收藏
2020-06-03

共1个答案

一尘不染

引用《Linux程序员手册》

detached属性仅确定线程终止时系统的行为。如果进程使用终止exit(3)(或等效地,如果主线程返回),则不会阻止线程终止。

同样来自Linux程序员手册

为了允许其他线程继续执行,主线程应通过调用pthread_exit() 而不是来终止exit(3)

2020-06-03