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函数 /****************************************************************** ...
随机推荐
- 如何用grep命令同时显示匹配行上下的n行 (美团面试题目)
标准unix/linux下的grep通过以下参数控制上下文 grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行grep -B 5 foo file 显示foo及前5 ...
- BZOJ 1079 着色方案(DP)
如果把当前格子涂什么颜色当做转移的话,状态则是每个格子的颜色数还剩多少,以及上一步用了什么颜色,这样的状态量显然是5^15.不可取. 如果把当前格子涂颜色数还剩几个的颜色作为转移的话,状态则是每个格子 ...
- vdbench和fio测试磁盘性能的对比总结
一.安装 1.安装vdbench,首先安装java:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...
- [LOJ2540] [PKUWC2018] 随机算法
题目链接 LOJ:https://loj.ac/problem/2540 Solution 写的时候脑子不太清醒码了好长然后时间\(LOJ\)垫底... 反正随便状压\(dp\)一下就好了,设\(f[ ...
- [CF888G]Xor-MST
题目大意:给一个$n$个点的完全图,第$i$个点有点权$v_i$,一条边$x-y$的边权为$v_x\oplus v_y$,求最小生成树 题解:明显$Kruskal$和$Prim$都会$TLE$,有一种 ...
- Android ListView 显示多种数据类型
ListView往往可能会有不同的数据类型,单类型的数据可能运用会比较少些,这也是最近项目中的一个需求{在发送消息的时候,需要选择联系人,而联系人列表由英文字母索引+联系人组成},上一篇文章只是一个基 ...
- 洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
P3521 [POI2011]ROT-Tree Rotations 题意:递归给出给一棵\(n(1≤n≤200000)\)个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少. 大体 ...
- linux 文件检索操作
linux命令太多了,作为一个后端开发人员,常用的也就这几个 uname -a 查看版本 tail tail -f /data/wealth-consignment-service/logs/stat ...
- React生命周期的变化
1.ES6语法的引入,砍掉了getDefaultProps和getInitialState getDefaultProps 使用 static default={}的方式代替getInitialSta ...
- bzoj 1150&2151&2288(双向链表+堆)(贪心)
经典模型:在n个点中选k个点,要求两两不相邻,且总权值最大/最小. 做法:用双向链表串起来,把所有点丢进堆里,选择一个点的时候把它左右两个点从双向链表和堆中去除,然后把这个点的权值加进ans,出堆后改 ...