linux线程 join/detach
linux中创建线程时,可以通过 __attr 指定线程的属性
extern int pthread_create (pthread_t *__thread, __const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg);
线程属性有四个:
1.detachstate 线程的分离状态属性
#include <pthread.h>
int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr, int *detachstate);
int pthread_attr_setdetachstate(const pthread_attr_t *attr, int *detachstate);
可以使用pthread_attr_setdetachstate把线程属性detachstate设置为以下两个合法值之一:PTHREAD_CREATE_DETACHED,PTHREAD_CREATE_JOINABLE。线程的分离状态决定一个线程以什么样的方式来终止自己。
JOINABLE属性即为非分离状态,这种状态的线程,可以被其他线程等待,pthread_join返回时,线程释放资源。原有的线程等待创建的线程结束,只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。如果其没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收,需要将线程的退出代码返回到父进程,才能终止自己。
分离状态的终止的线程,不能被其他线程等待,线程结束后直接释放资源。如果在创建线程时就知道不需要了解线程的终止状态,可以修改pthread_attr_t结构中的detachstate属性,让线程一开始就处于分离状态。
在子线程中加入代码 pthread_detach(pthread_self()) 或者父线程调用 pthread_detach(thread_id)(非阻塞,可立即返回),这将该子线程的状态设置为分离的(detached),如此一来,该线程运行结束后会自动释放所有资源。
2.guardsize 线程栈末尾的警戒缓冲区大小(字节数)
3.stackaddr 线程栈的最低地址
#include <pthread.h>
int pthread_attr_getstacksize(const pthread_attr_t *restrict attr, size_t *restrict stacksize)
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t *stacksize)
linux线程 join/detach的更多相关文章
- c/c++ 基本线程管理 join detach
基本线程管理 join detach join:主线程等待被join线程结束后,主线程才结束. detach:主线程不等待被detach线程. 问题1:子线程什么时点开始执行? std::thread ...
- linux线程(二)内存释放
linux线程有两种模式joinable和unjoinable. joinable线程:系统会保存线程资源(栈.ID.退出状态等)直到线程退出并且被其他线程join. unjoinable线程:系统会 ...
- Linux线程学习(一)
一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可 ...
- Linux线程学习(二)
线程基础 进程 系统中程序执行和资源分配的基本单位 每个进程有自己的数据段.代码段和堆栈段 在进行切换时需要有比较复杂的上下文切换 线程 减少处理机的空转时间,支持多处理器以及减少上下文切换开销, ...
- Linux线程编程之信号处理
前言 Linux多线程环境中的信号处理不同于进程的信号处理.一方面线程间信号处理函数的共享性使得信号处理更为复杂,另一方面普通异步信号又可转换为同步方式来简化处理. 本文首先介绍信号处理在进程中和线程 ...
- Linux线程退出、资源回收、资源清理的方法
首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题. 1.子线程创建时从父线程copy出来的栈内存; 线程退出有多种方式,如return,pthread_exit,pthread_c ...
- 【Linux开发】彻底释放Linux线程的资源
Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的.而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出 ...
- Linux线程互斥学习笔记--详细分析
一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...
- 线程join理解
1.python默认参数创建线程后,不管主线程是否执行完毕,都会等待子线程执行完毕才一起退出,有无join结果一样 2.如果创建线程,并且设置了daemon为true,即thread.setDaemo ...
随机推荐
- 使用systemback制作Ubuntu自定义系统镜像和系统备份(抄)
使用systemback制作Ubuntu自定义系统镜像和系统备份 2017年06月23日 16:17:51 BWBOT 阅读数:10714 原链接:https://community.bwbot. ...
- Educational Codeforces Round 62 Div. 2
突然发现上一场edu忘记写了( A:签到. #include<iostream> #include<cstdio> #include<cmath> #include ...
- NOIP 2019 RP++
\[\huge NOIP^{2019}_{RP++}\] \[\huge NOIP^{2019}_{Score++}\]
- jmeter笔记(6)--参数化--函数助手
函数助手提供的功能很多,本次笔记主要整理_CSVRead 函数._Random函数以及_RandomString函数的基础使用方法 1._CSVRead 作用:直接读取csv文件的值生成函数 1.在[ ...
- node配置环境变量
package.json "scripts": { "start_test": "cross-env BUILD_ENV=dev nuxt start ...
- k8s常用命令演示
kubectl run --image=xxx name_xx --port kubectl run --image=nginx nginx-app --port=80 kubectl expose ...
- js+jquery创建元素
例:创建如下标签: <a id="baidu" class="link" name="baidu">这是一个链接</a&g ...
- Vue学习笔记六:v-model 数据双向绑定
目录 v-model简介和适用范围 新建HTML 所见即所得 v-model模拟简易计算器 v-model简介和适用范围 Vue的一大特点之一就是数据的双向绑定,v-model就是实现这个功能的指令, ...
- MarkDown里面的Emoji表情
我才发现MarkDown里面可以使用一些Emoji表情,好玩,以后写博客的趣味性大大增加 想看全部的就去这里找https://www.webfx.com/tools/emoji-cheat-sheet ...
- ORACLE not available
1 先看oracle的监听和oracle的服务是否都启动了. 启动oracle监听:cmd命令行窗口下,输入lsnrctl start,回车即启动监听. 2 查看oracle的sid叫什么,比如创建数 ...