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


相关文章
|
5月前
|
存储 并行计算 程序员
pthread_create函数详解
pthread_create函数详解
|
Linux
wait() 函数和 waitpid() 函数
wait() 函数和 waitpid() 函数
721 0
wait() 函数和 waitpid() 函数
|
物联网 Linux 开发者
signal 函数1|学习笔记
快速学习 signal 函数1
signal 函数1|学习笔记
|
算法 物联网 Linux
Pthread_create 线程创建|学习笔记
快速学习 Pthread_create 线程创建
|
Linux API
pthread_mutex_init & 互斥锁pthread_mutex_t的使用
pthread_mutex_init l         头文件: #include l         函数原型: int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; l         函数作用: 该函数用于C函数的多线程编程中,互斥锁的初始化。
1929 0