linux——线程设置分离属性

通过属性设置线程的分离

1.线程属性类型: pthread_attr_t attr;

2.线程属性操作函数:

对线程属性变量的初始化

int pthread_attr_init(pthread_attr_t* attr);

设置线程分离属性

int pthread_attr_setdetachstate( pthread_attr_t* attr, int detachstate );

参数: attr : 线程属性

detachstate

PTHREAD_CREATE_DETACHED(分离)

PTHREAD_CREATE_JOINABLE(非分离)

释放线程资源函数

int pthread_attr_destroy(pthread_attr_t* attr);

复制代码
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<string.h>
void* myfunc(void *arg)
{
        printf("child pthread id:%ld\n",pthread_self());
        return 0;
}
int main()
{
        pthread_t pthid;
        int ret;
        //init attr
        pthread_attr_t attr;
        pthread_attr_init(&attr);
        //set attr
        pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);

        ret = pthread_create(&pthid,&attr,myfunc,NULL);
        if(ret != 0)
        {
                printf("error number is %d\n",ret);
                printf("%s\n",strerror(ret));
        }
        printf("parent pthread id:%ld\n",pthread_self());

        for(int i=0;i<5;i++)
        {
                printf("i=%d\n",i);
        }
        sleep(2);
        pthread_attr_destroy(&attr);
        return 0;
}

这段代码就是创建一个分离线程,主线程不用等它,他自己跑完自动回收资源,不需要pthread_join。

也可以用pthred_detach(pthid),就属于创建后将普通线程修改为分离线程,效果是一样的

复制代码
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<string.h>

void* myfunc(void *arg)
{
    printf("child pthread id:%ld\n",pthread_self());
    return NULL;
}

int main()
{
    pthread_t pthid;
    int ret;

    
    ret = pthread_create(&pthid,NULL,myfunc,NULL);
    if(ret != 0)
    {
        printf("error:%d %s\n",ret,strerror(ret));
    }

    // 创建完立刻设为分离态
    pthread_detach(pthid);  

    printf("parent pthread id:%ld\n",pthread_self());
    for(int i=0;i<5;i++){ printf("i=%d\n",i); }

    sleep(2);

    return 0;
}

两种方法都可以,完全等价。

相关推荐
_upupup31 分钟前
Linux中的自动化构建——make/Makefile
linux·运维·自动化
HEJOO91 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
slimer2 小时前
07.进制转换上篇:位权展开与十进制互转
linux
顺风尿一寸2 小时前
手写迷你 Docker:用 Namespace + Cgroup v2 实现一个简单容器
linux
一木 之林2 小时前
DeepSeek Agent 开发(三)
java·大数据·linux
大猫会长3 小时前
调用codebuddy集成的supabase授权白屏解决方法
linux·运维·服务器
羔羊++3 小时前
29_实验二十八_buildroot配置与编译
linux
LoneEon3 小时前
CentOS7 部署 Nacos3.x 集群实战:从注册中心到 AI 管理中心
linux·人工智能·nacos
传人4 小时前
为什么 Xshell 中可以通过java -version查询到java 版本号码,Electerm 却查不到?
java·linux·服务器
鬼手点金4 小时前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播