Linux线程基础函数
1. 线程标识:
(1) 比较两个线程ID;
#include <pthread.h> int pthread_equal(pthread_t tid1, pthread_t tid2); ret-若相等则返回非0值,否则返回0值
(2) 获取线程自身ID;
#include <pthread.h> pthread_t pthread_self(void); ret-调用线程的线程ID
2. 线程的创建:
#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, //返回线程的ID
const pthread_attr_t *restrict attr, //线程属性,默认为NULL
void *(*start_rtn)(void), //线程函数入口地址
void *restrict arg); //参数
ret-成功返回0 失败返回错误编号
3. 线程的终止:
(1) 线程只是从启动例程中返回,返回值是线程的退出码;
(2) 线程可以被同一例程中的其他线程取消;
(3) 线程调用pthread_exit。
#include <pthread.h> void pthread_exit(void *rval_ptr);
rval_ptr是一个无类型指针,与传递给启动例程的单个参数类似,进程中的其他线程可以通过调用pthread_join函数访问到这个指针;
#include <pthread.h> int pthread_join(pthread_t thread, void **rval_ptr); ret-成功返回0 否则返回错误编号
调用线程一直阻塞,知道指定的线程调用pthread_exit,从启动例程中返回或者被取消;如果线程只是从他的启动例程中返回,rval—_ptr将包含返回码;如果线程被取消,由rval_ptr指定的内存单元就设置为PTHREAD_CANCELED.
如果线程已经处于分离状态,pthread_t就会调用失败,返回EINVAL。
如果对线程的返回值不感兴趣,可以吧rval_prt设置为NULL。这种情况下,调用pthread_join将等待线程终止,但不获取线程的终止状态。
4. 线程取消:
#include <pthread.h> int pthread_cancel(pthread_t tid); ret-成功返回0 失败返回错误码
函数使得由tid标识的线程行为表现为如果调用了参数是PTHREAD_CANCELD的pthread_exit函数,但是,线程可以选择忽略取消方式或者是控制取消方式。函数并不等待线程终止,它仅仅是提出请求;
5. 线程清理处理函数:
#include <pthread.h> void pthread_cleanup_push(void(*rtn)(void*), void *arg);
void pthread_cleanup_pop(int execute); //调用删除上次push的清理程序
当线程执行以下动作时调用清理函数,调用者参数为arg,清理函数rtn的调用顺序是由pthread_cleanup_pus来安排的。
a. 调用pthread_exit;
b. 想用取消请求;
c. 用非零的execute参数调用pthread_cleanup_pop;
如果execute=0则函数不被调用;
注意正常从线程返回的时候,不会调用该清理函数;
Linux线程基础函数的更多相关文章
- linux 线程基础
线程基础函数 查看进程中有多少个线程,查看线程的LWP ps -Lf 进程ID(pid) 执行结果:LWP列 y:~$ ps -Lf 1887 UID PID PPID LWP C NLWP STIM ...
- Linux线程基础
复习中掌握线程的基本管理即可,而不用考虑线程的同步: 创建线程花费的代价,比创建进程小得多,所以同一个进程的,多个线程执行多个任务-->比多个进程执行多个任务更有效率. 线程也分为用户级线程.内 ...
- Linux 线程属性函数总结
1.初始化一个线程对象的属性 int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参: attr 指向一个线程属性 ...
- 被linux线程基础折磨的点滴——还是没得到完美的答案,但至少得到了所需
#include<sys/types.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> ...
- Linux 系统应用编程——线程基础
传统多任务操作系统中一个可以独立调度的任务(或称之为顺序执行流)是一个进程.每个程序加载到内存后只可以唯一地对应创建一个顺序执行流,即传统意义的进程.每个进程的全部系统资源是私有的,如虚拟地址空间,文 ...
- linux 线程函数大全
Technorati 标签: Linux thread 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线 ...
- Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量
Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程: 1.线程是一堆指令,是操作系统调度 ...
- 【Linux 线程】常用线程函数复习《二》
1.函数pthread_join /************************************************************************* > Fil ...
- 【Linux 线程】常用线程函数复习《一》
1.pthread_create以及pthread_self函数 /****************************************************************** ...
随机推荐
- js滚动大于多少菜单就开始固定
//导航置顶 $(window).scroll(function () { var pos = $(window).scrollTop(); ) { $("#menu").addC ...
- 【bzoj3036】绿豆蛙的归宿 期望dp
题目描述 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如 ...
- Go语言【第七篇】:Go函数
Go语言函数 函数是基本的代码块,用于执行某个任务.Go语言最少有个main()函数,可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务.函数声明告诉了编译器函数的名称,返回类型和参数.Go ...
- 【hackerrank】Week of Code 26
在jxzz上发现的一个做题网站,每周都有训练题,题目质量……前三题比较水,后面好神啊,而且类型差不多,这周似乎是计数专题…… Army Game 然后给出n*m,问需要多少个小红点能全部占领 解法:乘 ...
- ZOJ2314:Reactor Cooling——题解
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题目大意:无源汇上下界网络流,问每个管子走多少流量才能满足所有管子的下界 ...
- [Leetcode] Binary tree postorder traversal二叉树后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...
- POJ.3172 Scales (DFS)
POJ.3172 Scales (DFS) 题意分析 一开始没看数据范围,上来直接01背包写的.RE后看数据范围吓死了.然后写了个2^1000的DFS,妥妥的T. 后来想到了预处理前缀和的方法.细节以 ...
- Consul入门
推荐: Consul 原理和使用简介 启动:consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node Litao-Mac ...
- IOI2000 Post Office (POJ1160)
前言 昨天XY讲课!讲到这题!还是IOI的题!不过据说00年的时候DP还不流行. 题面 http://poj.org/problem?id=1160 分析 § 1 中位数 首先我们考虑,若有x1 & ...
- exBSGS板子
/*bzoj2480*/ #include <map> #include <cmath> #include <cstdio> #include <cstrin ...