linux线程退出正确姿势demo
当一个非分离的线程终止后,该线程的内存资源(线程描述符和栈)并不会被释放,直到有线程对它使 用了pthread_join时才被释放。
因此,必须对每个创建为非分离的线程调用一次pthread_join调用,以避免内存泄漏。否则当线程是可分 离的,调用pthread_exit,将终止该调用线程,并释放所有资源,没有线程等待它终止。
1、线程函数退出
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
void *func(void *arg)
{
pthread_exit("Thread funtion finished!");//显示声明,线程退出,返回值为字符串
//return (void *)2;//线程结束返回;隐式声明,线程退出
}
int main()
{
int res;
pthread_t a_thread;
void *thread_res;
res = pthread_create(&a_thread,NULL,func,(void*)0);
if(res != 0)
{
perror("Fail to create a new thread");
exit(EXIT_FAILURE);
}
/*当一个线程通过调用pthread_exit()退出或者简单地从启动历程中返回时,进程中的其他线程可以通过调用pthread_join()函数获得进程的退出状态。调用pthread_join进程将一直阻塞,直到指定的线程调用pthread_exit,从启动例程中或者被取消。*/
res = pthread_join(a_thread,(void*)&thread_res /*NULL*/); //也可以返回NULL;phread_join()等待一个线程终止
if(res != 0)
{
perror("thread join error");
exit(EXIT_FAILURE);
}
printf("线程退出,捕获返回值 = %s\n",(char *)thread_res);
printf("sizeof(void*) = %d",sizeof(void *));//打印出发现void *占了8个字节
//printf("线程返回,捕获返回值 = %ld\n",(long)thread_res); //所以用long类型转换而没有警告
exit(EXIT_SUCCESS);
}
linux线程退出正确姿势demo相关推荐
- 怎么用linux的HDD存储,Linux学习的正确姿势12:Linux存储概览
原标题:Linux学习的正确姿势12:Linux存储概览 从工作原理区分 机械 HDD 固态 SSD SSD的优势 SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械 ...
- Linux线程退出、资源回收、资源清理的方法
首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题. 1.子线程创建时从父线程copy出来的栈内存; 线程退出有多种方式,如return,pthread_exit,pthread_c ...
- linux 线程退出 signal,Linux signal 那些事儿 (3)
这篇博客,想集中在signal 与线程的关系上,顺带介绍内核signal相关的结构.如何组织我其实并没想好,想到哪就写到哪里吧.主题一定会落在signal之内而不跑题. 提到signal与thread ...
- linux 线程退出资源回收,有关linux线程资源回收的有关问题
有关linux线程资源回收的问题 使用linux c编程的,开启一个线程,这个线程中申请了一些资源.如果需要这个线程马上取消并且回收申请的资源怎么办啊? 前面使用了pthread_cancel()这个 ...
- linux线程调用完类就退出,linux下 c中怎么让才能安全关闭线程 和 linux线程退出时执行的程序(线程清理处理程序)简单例子...
多线程退出有三种方式: (1)执行完成后隐式退出: (2)由线程本身显示调用pthread_exit 函数退出: pthread_exit (void * retval) ; (3)被其他线程用pth ...
- arm linux线程退出,【ARMLinux】linux系统下多线程编程
/**************************************************************************************** * 文件名: pro ...
- java 切换主线程_Java线程状态及切换、关闭线程的正确姿势分享
前言 在讲线程之前有必要讨论一下进程的定义:进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位.进程实体由程序段, 数据段 PCB(进程控制块)组成.线程又是什么?线程可以 ...
- Linux下多线程编程---02(线程退出与线程资源的回收)
线程退出的三种情况:第一种是进程结束,进程中所有的线程也会随之结束.第二种是通过函数 pthread_exit 来主动的退出线程.第三种被其他线程调用 pthread_cancel 来被动退出. 当线 ...
- java线程池shutdown_关闭线程池的正确姿势,shutdown(), shutdownNow()和awaitTermination() 该怎么用?...
关闭线程池的正确姿势,shutdown(), shutdownNow()和awaitTermination() 该怎么用? ExecutorService 接口提供了三个方法用于手动关闭线程池,分别是 ...
最新文章
- 河南省高中毕业会考计算机考试,河南高中会考等级划分标准
- 九十八、轻松搞定Python中的Markdown系列
- Spring MVC:高级会话
- commons-pool
- Objective-C消息转发
- vue根据指令动态改变title名字
- 内蒙古师范大学计算机与科学,2021年内蒙古师范大学计算机科学与技术(077500)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
- Java异步编程——深入源码分析FutureTask
- 【跳频通信】基于matlab跳频通信系统仿真【含Matlab源码 967期】
- JS中使用MD5进行字符串加密
- Senparc.Weixin 授权获取微信信息
- 常用DateUtil
- 液压机行业研究及十四五规划分析报告
- BorisFX Sapphire 2019 for OFX Mac使用教程
- 蓝桥杯试题c语言蛇形填数,2020十月份蓝桥杯B组省赛题解大全(害!附题面文件和部分代码~)...
- MAYA安装未完成,某些产品无法安装的解决方法
- 截止失真放大电路_这些基本放大器的知识,你会了吗?
- win7计算机ip地址怎么查,win7电脑的IP地址怎样查看
- JavaScript 常用事件大全
- 电脑蓝屏的原因及解决办法