pthread_detach函数

简介: 指定该状态,线程主动与主控线程断开关系。线程结束后(不会产生僵尸线程),其退出状态不由其他线程获取,而直接自己自动释放(自己清理掉PCB的残留资源)进程结束后,线程也会结束。网络、多线程服务器常用

1,函数的声明:


int pthread_detach(pthread_t thread);


2,函数的返回值

成功:0;失败:错误号


3,作用:


从状态上实现线程分离


4,线程分离状态:


指定该状态,线程主动与主控线程断开关系。线程结束后(不会产生僵尸线程),其退出状态不由其他线程获取,而直接自己自动释放(自己清理掉PCB的残留资源)进程结束后,线程也会结束。网络、多线程服务器常用。


5,使用pthread_detach函数实现线程分离


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
void *tfn(void *arg)
{
        int n = 3;
        while (n--) {
                printf("thread count %d\n", n);
                sleep(1);
        }
        //return (void *)1;
    pthread_exit((void *)1);
}
int main(void)
{
        pthread_t tid;
        void *tret;
        int err;
#if 0
        pthread_attr_t attr;            /*通过线程属性来设置游离态(分离态)*/
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_create(&tid, &attr, tfn, NULL);
#else
        pthread_create(&tid, NULL, tfn, NULL);
        pthread_detach(tid);         //让线程分离  ----自动退出,无系统残留资源
#endif
        while (1) {
                err = pthread_join(tid, &tret);
        printf("-------------err= %d\n", err);
                if (err != 0)
                        fprintf(stderr, "thread_join error: %s\n", strerror(err));
                else
                        fprintf(stderr, "thread exit code %d\n", (int)tret);
                sleep(1);
        }
        return 0;
}


相关文章
|
4月前
|
存储 安全 NoSQL
pthread_getspecific和pthread_setspecific详解
pthread_getspecific和pthread_setspecific详解
|
4月前
|
Linux API C++
C++ 11 使用detach()和join()函数使用的注意点
最近做项目的时候,使用了c++11的多线程,以前做项目都是使用微软提供的一些api,比如临界区、Mutex等来实现多线程,但是比如临界区这玩意只在windows下才有,linux是没有这个概念的,所以为了跨平台,c++11之后,就提供了多线程的支持。
30 0
|
4月前
|
存储 缓存 安全
C语言进程(第二章,wait,sleep,waitpid,pthread_mutex_lock,pthread_mutex_unlock)
C语言进程(第二章,wait,sleep,waitpid,pthread_mutex_lock,pthread_mutex_unlock)
32 0
|
Linux
wait() 函数和 waitpid() 函数
wait() 函数和 waitpid() 函数
614 0
wait() 函数和 waitpid() 函数
|
算法 物联网 Linux
Pthread_create 线程创建|学习笔记
快速学习 Pthread_create 线程创建
97 0