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

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

相关推荐
宵时待雨2 小时前
linux笔记归纳1:linux初识
linux·运维·笔记
|_⊙2 小时前
Linux进程(上)
linux·运维·服务器
feng_you_ying_li2 小时前
linux之git/gdb的使用与介绍
linux
吕司2 小时前
Linux页表的概念
linux·运维·服务器
ShineWinsu2 小时前
对于Linux:环境变量的解析
linux·面试·笔试·进程·环境变量·本地变量·getenv
坚持就完事了2 小时前
Linux上编写和运行Python\Java
linux·运维·服务器
超绝振刀怪2 小时前
【Linux 环境变量和地址空间】
linux·环境变量·fork·写诗拷贝
lwx9148529 小时前
Linux-特殊权限SUID,SGID,SBIT
linux·运维·服务器
皮卡狮10 小时前
Linux权限的概念
linux