linux pthread pthread_create pthread_join pthread_detach

linux 下面默认 pthread_create 由调用者自己负责子线程的资源回收

当父线程退出时候,子线程也会跟着退出,所以父线程推出的时候要调用pthread_join函数阻塞等待子线程的退出

pthread_detach( tid)  使线程tid 的线程处于分离状态,线程处于分离状态是该线程终止的时候资源被回收,不然的话该终止的子线程会占用系统资源直到父线程调用pthread_join

1 父线程先与子线程终止

  此时:

    如果子线程已近与父线程分离,如调用pthread_datach ,资源被回收

       如果没有分离,资源无法释放

1 子线程先与父线程终止

  此时:

    如果子线程调用了线程分离函数pthread_detach, 或父线程调用了pthread_join ,资源被释放

     如果上面两个都没有调用,资源无法释放

 

时间: 2024-11-08 03:49:54

linux pthread pthread_create pthread_join pthread_detach的相关文章

linux pthread多线程编程模板

pthread_create() 创建线程,pthread_join()让线程一直运行下去. 链接时要加上-lpthread选项. pthread_create中, 第三个参数为线程函数,定义如下: void * heartbeat_thread() { ... } 下面是main.c : #include <pthread.h> pthread_t thread[MAX_THREAD_NUM]; pthread_mutex_t cache_mutex; pthread_mutex_t var

linux pthread【转】

转自:http://www.cnblogs.com/alanhu/articles/4748943.html Posix线程编程指南(1) 内容:  一. 线程创建  二.线程取消 关于作者  线程创建与取消  杨沙洲([email protected])  2001 年 10 月 这是一个关于Posix线程编程的专栏.作者在阐明概念的基础上,将向您详细讲述Posix线程库API.本文是第一篇将向您讲述线程的创建与取消.   一. 线程创建 1.1 线程与进程  相对进程而言,线程是一个更加接近

linux pthread和java thread的是/非守护线程的行为

pthread_xxx 的函数并没有直接提供设置一个pthread为守护线程的api 而pthread_attr_init() 和 struct pthread_attr_t 也并没有提供 线程是否被设置为守护线程的成员变量 但java 的线程对象有 setDaemon() 方法将线程设置为守护线程 那我们看看java的Thread的native层是如何实现该变量的功能的 void Thread::CreateNativeThread(JNIEnv* env, jobject java_peer

Linux pthread

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <unistd.h> //####################################################### // // 李刚 // 2016.8.17 // pthread 线程参数传递 // //######################

linux 之 pthread_create 实现类的成员函数做参数

在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create创建线程,线程函数是一个全局函数,所以在C++中,创建线程时,也应该使用一个全局函数.static定义的类的成员函数就是一个全局函数. class Thread { private: pthread_t pid; private: static void * start_thread(void *a

界面编程之QT的线程20180731

/*******************************************************************************************/ 一.为什么需要使用线程 图形界面中一旦使用了线程休眠,图形界面就不会刷新(不会动),呈现卡住无响应的状态. 这是由于图形界面中是单线程的 所以  很复杂的数据处理 耗时长的,就需要创建线程. QThread 线程类, qt中的线程睡眠函数:QThread::sleep(); void MyWidget::on_

linux下多线程之pthread_detach(pthread_self())

写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多).只有当你调用了pthread_join之后这些资源才会被释放.若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自

pthread_join和pthread_detach的用法

//从别处拷贝过来的,只作为自己查看方便,原作者不详,请谅解. 一:关于join join join是三种同步线程的方式之一.另外两种分别是互斥锁(mutex)和条件变量(condition variable). 调用pthread_join()将阻塞自己,一直到要等待加入的线程运行结束. 可以用pthread_join()获取线程的返回值. 一个线程对应一个pthread_join()调用,对同一个线程进行多次pthread_join()调用是逻辑错误. join or detach 线程分两

linux服务器开发二(系统编程)--线程相关

线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共享). 进程与线程的区别:在于是否共享地址空间. 独居(进程). 合租(线程). Linux下: 线程:最小的执行单位. 进程:最小分配资源单位,可看成是一个线程的进程. 安装man文档 sudo apt-get install glibc-doc sudo apt-get install manp