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;
}

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

相关推荐
Tim风声(网络工程师)1 小时前
Kail下载
linux·运维·服务器
AOwhisky2 小时前
Linux 网络服务架设学习笔记(第五期)——Web 服务(上篇):Apache HTTP Server——从静态到动态
linux·运维·服务器·笔记·学习·云计算·apache
zbyyd2 小时前
Linux 多线程:互斥锁 &amp; 信号量
linux·c语言·开发语言·网络
斑马1392 小时前
Linux软件编程学习笔记(四)——进程
linux·运维·服务器
扛枪的书生3 小时前
Linux 三剑客 - Awk 命令指南
linux·运维
喜欢吃燃面3 小时前
HTTP协议深度解析:从请求响应到状态管理与安全传输
linux·网络协议·学习
Tanner_SL3 小时前
Linux笔记之正则表达式和文本处理grep,sed,awk命令
linux·正则表达式
学linux的QQ蛋4 小时前
Linux 文件 IO vs 标准 IO:缓冲区、目录操作、常用函数汇总
linux·运维·服务器
苍狗T4 小时前
k8s 控制器管理
linux·运维·云原生·容器·kubernetes
Linux运维技术栈4 小时前
筑牢业务信息安全防线:雷池WAF+后端日志溯源的全链路防护体系落地实践
linux·安全·雷池