linux 进程状态函数,三十七、Linux 线程——线程清理和控制函数、进程和线程启动方式比较、线程的状态转换...
37.1 线程清理和控制函数
#include
void pthread_cleanup_push(void (* rtn)(void *), void *arg);
void pthread_cleanup_pop(int execute);
函数参数
rtn:清理函数指针
arg:调用清理函数传递的参数
execute:值 1 时,执行线程清理函数;值 0 时,不执行线程清理函数
返回值
成功,返回 0;否则,返回错误编号
触发线程调用清理函数的工作
调用 pthread_exit
响应取消请求
用非零 execute 参数调用 thread_cleanup_pop 时
#include
#include
#include
/** 定义线程清理函数 */
void clean_fun(void *arg)
{
char *s = (char *)arg;
printf("clean_fun: %s\n", s);
}
void *th_fun(void *arg)
{
int execute = (int )arg;
pthread_cleanup_push(clean_fun, "first clean func");
pthread_cleanup_push(clean_fun, "second clean func");
printf("thread running %lx\n", pthread_self());
pthread_cleanup_pop(execute);
pthread_cleanup_pop(execute);
return (void *);
}
int main(void)
{
int err;
pthread_t th1, th2;
if((err = pthread_create(&th1, NULL, th_fun, (void *))) != ) {
perror("pthread create error");
}
pthread_join(th1, NULL);
printf("th1(%lx) finished\n", th1);
if((err = pthread_create(&th2, NULL, th_fun, (void *))) != ) {
perror("pthread create error");
}
pthread_join(th2, NULL);
printf("th2(%lx) finished\n", th2);
return ;
}
运行如下:
线程结束,会触发调用最终的 clean 函数,调用的时候会根据 pop 里面的入栈顺序,先入后出进行调用。
37.2 进程和线程启动方式比较
37.3 线程的状态转换
Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信
1.Java使用Thread类代表线程. 所有的线程对象必须是Thread类或其子类的实例. 当线程继承Thread类时,直接使用this即可获取当前线程,Thread对象的getName() ...
11.python之线程,协程,进程,
一,进程与线程 1.什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行 ...
“全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
Java并发编程原理与实战三十七:线程池的原理与使用
一.简介 线程池在我们的高并发环境下,实际应用是非常多的!!适用频率非常高! 有过使用过Executors框架的朋友,可能不太知道底层的实现,这里就是讲Executors是由ThreadPoolExe ...
第三十七章 POSIX线程(一)
POSIX线程库相关介绍 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都有"pthread_"开头 要使用这些函数库,都需要加入头文件"
VC启动一个新线程的三种方法
第一种AfxBeginThread() 用AfxBeginThread()函数来创建一个新线程来执行任务,工作者线程的AfxBeginThread的原型如下: CWinThread* AfxBegin ...
Linux常用三十七条指令
Linux常用三十七条指令 基础指令(11):ls,pwd,cd,mkdir,touch,cp.mv,rm,vim,>/>>/,cat 进阶指令(10):df,free,head,t ...
[转帖]Linux系统进程的知识总结,进程与线程之间的纠葛...
Linux系统进程的知识总结,进程与线程之间的纠葛... https://cloud.tencent.com/developer/article/1500509 当一个程序开始执行后,在开始执行到执行 ...
Linux系统进程的知识总结,进程与线程之间的纠葛...
来源:嵌入式ARM 当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我 ...
随机推荐
51nod比赛
http://www.cnblogs.com/wzj-is-a-juruo/p/5619901.html
一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
Angular过滤器 自定义及使用方法
首先设置自定义过滤器. 定义模块名:angular .module('myApp') .filter('filterName',function(){ return function(要过滤的对象,参 ...
form表单提交
1.form表单提交.html页面失败
Linux 查找命令汇总
linux下查找命令挺多,本文以列表方式说明which.whereis.locate.find命令的区别: 命令 概述 语法 示例 适用OS 搜索结果 which 在PATH变量指定的路径中,搜索某个 ...
STL -->; set用法
set用法 一.set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. 需要包含头文件: #include
esxi虚拟机克隆后的主机网卡设置
windows 在虚拟机配置页面右击属性,编辑虚拟机设置,删除掉原来的网卡,重新添加新的网卡 进入系统以后,进入 windows/system32 找到sysprep,运行等待电脑重启 重启过程会稍微 ...
MySQL concat用法举例
concat配合information_schema的应用 1 concat的一般用法主要是用于拼接 示例: 执行语句 SELECT CONCAT('M','y','S','Q','L') 可以 ...