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


相关文章
|
2月前
|
存储 并行计算 程序员
pthread_create函数详解
pthread_create函数详解
|
Linux
wait() 函数和 waitpid() 函数
wait() 函数和 waitpid() 函数
644 0
wait() 函数和 waitpid() 函数
|
Linux 调度
vfork() 函数
vfork() 函数
58 0
|
算法 物联网 Linux
Pthread_create 线程创建|学习笔记
快速学习 Pthread_create 线程创建
115 0
|
Linux
关于signal和fork的思考
fork可以在linux中创建子进程。先看man手册里面的东西: SYNOPSIS       #include        pid_t fork(void);DESCRIPTION       fork()  creates  a new process by duplicating the calling process.
1201 0