首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthread_detach问题

pthread_detach问题
EN

Stack Overflow用户
提问于 2011-05-18 10:06:48
回答 5查看 47.8K关注 0票数 24

直到最近,我的印象是,如果你“分离”一个线程在产卵后,线程甚至在“主”线程结束后仍然存在。

但是一个小小的实验(如下所示)与我的信念背道而驰。我希望分离的线程即使在主终止后仍会继续打印“从分离的线程中”,但这似乎没有发生。申请显然终止了..。

”问题返回0后,“分离”线程是否死掉?

代码语言:javascript
复制
#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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-18 10:10:03

引用Linux程序员手册

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

也来自Linux程序员手册

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

票数 45
EN

Stack Overflow用户

发布于 2011-05-18 10:10:16

pthread_detach只是意味着您再也不会加入线程了。这使p线程库能够知道,一旦线程退出(分离的情况),它是否可以立即释放线程资源,或者是否必须保持线程资源,因为您以后可能会在线程上调用pthread_join

一旦main返回(或退出),操作系统将收获所有线程并破坏您的进程。

票数 23
EN

Stack Overflow用户

发布于 2011-05-18 10:20:13

pthread_detach不做您认为它做的事情-它向实现表明,具有指定ID的线程所使用的空间可以在其终止时立即回收,即。不会对其执行pthread_join操作。

一旦包含线程的进程终止,所有线程都将终止。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6042970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档