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

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

相关推荐
Yana.nice2 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
DFT计算杂谈6 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
Zhang~Ling7 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind7 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森7 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot8 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
重生的黑客8 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
骑上单车去旅行10 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻10 小时前
Linux 常用命令
linux
ShirleyWang01211 小时前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s