Unix环境高级编程读书笔记-Posix线程
来源:互联网 发布:中维网络监控系统 编辑:程序博客网 时间:2024/05/20 01:08
线程API
//与线程相关的API函数都在libpthread库中,因此使用线程相关函数时,在编译时应当使用-lpthread来链接线程库。
#include <pthread.h>
int pthread_equal(pthread_t tid1,pthread_t tid2);//判断两个线程ID是否一致。在不同的实现中,pthread_t的数据类型可能不一致,因此,实现线程ID比较函数。
pthread_t pthread_self(void);//返回当前线性的ID号
//线程创建
int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void*),void *restrict arg);
//tidp:线程成功返回,tidp指线新的线程ID
//start_rtn:新创建的线程从start_rtn指向的函数开始执行,其参数由arg指定。
//attr:线程属性。如果创建默认的线程,将此参数设为NULL。
//线程属性的设置:
int pthread_attr_init(pthread_attr_t *attr);//初始化线程属性
int pthread_attr_destroy(pthread_attr_t *attr);//析构线程属性
//设置创建线程的分离状态
int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr,
int *detachstate);//获取当前的detachstate状态
int pthread_attr_setdetachstate(const pthread_attr_t *restrict attr,
int detachstate);//设置当前的detachstate状态,detachstate为PTHREAD_CREATE_DETACHED或者PTHREAD_CREATE_JOINABLE
//设置线程栈属性
int pthread_attr_setstack(const pthread_attr_t *restrict attr,
void * stackaddr,
size_t *stacksize);//不要设置栈地址,stackaddr设为NULL。
//线程退出(只是退出单个线程,进程不退出,若进程最后一个线程退出,则整个进程退出)
1、线程从启动例程返回,返回值为退出码。
2、线程可以被同一进程的其他线程取消。
3、线程调用pthread_exit
int pthread_exit(void *rval_ptr);//其他线程通过调用pthread_join访问退出码rval_ptr
int pthread_join(pthread_t thread,void **rval_ptr);
//pthread_join将一直阻塞,直到线程thread从启动例程返回、调用pthread_exit或者被同一进程的其他线程取消。
//若thread线程处理JOINABLE状态,则pthread_join将会调用失败。
//线程清理函数注册
void pthread_cleanup_push(void (*rtn)(void *),void *arg);
void pthread_cleanup_pop(int execute);
//以上两个函数成对出现,当出现以下动作时,调用清理函数,调用参数为arg,调用顺序按出栈顺序调用。
1、调用pthread_exit时
2、响应取消请求
3、用非零的execute调用pthread_cleanup_pop
//若调用pthread_cleanup_pop的execute参数为零,清理函数将不会被调用。无论execute是否为零,都将删除栈顶的清理函数。
//线程取消
int pthread_cancel(pthread_t tid);//请求取消线程tid,但是不是马上被取消,与被取消线程有关,被取消线程可以选择忽略取消请求。
//线程分离
int pthread_detach(pthread_t tid);//使线程tid处理分离状态
//与线程相关的API函数都在libpthread库中,因此使用线程相关函数时,在编译时应当使用-lpthread来链接线程库。
#include <pthread.h>
int pthread_equal(pthread_t tid1,pthread_t tid2);//判断两个线程ID是否一致。在不同的实现中,pthread_t的数据类型可能不一致,因此,实现线程ID比较函数。
pthread_t pthread_self(void);//返回当前线性的ID号
//线程创建
int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void*),void *restrict arg);
//tidp:线程成功返回,tidp指线新的线程ID
//start_rtn:新创建的线程从start_rtn指向的函数开始执行,其参数由arg指定。
//attr:线程属性。如果创建默认的线程,将此参数设为NULL。
//线程属性的设置:
int pthread_attr_init(pthread_attr_t *attr);//初始化线程属性
int pthread_attr_destroy(pthread_attr_t *attr);//析构线程属性
//设置创建线程的分离状态
int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr,
int *detachstate);//获取当前的detachstate状态
int pthread_attr_setdetachstate(const pthread_attr_t *restrict attr,
int detachstate);//设置当前的detachstate状态,detachstate为PTHREAD_CREATE_DETACHED或者PTHREAD_CREATE_JOINABLE
//设置线程栈属性
int pthread_attr_setstack(const pthread_attr_t *restrict attr,
void * stackaddr,
size_t *stacksize);//不要设置栈地址,stackaddr设为NULL。
//线程退出(只是退出单个线程,进程不退出,若进程最后一个线程退出,则整个进程退出)
1、线程从启动例程返回,返回值为退出码。
2、线程可以被同一进程的其他线程取消。
3、线程调用pthread_exit
int pthread_exit(void *rval_ptr);//其他线程通过调用pthread_join访问退出码rval_ptr
int pthread_join(pthread_t thread,void **rval_ptr);
//pthread_join将一直阻塞,直到线程thread从启动例程返回、调用pthread_exit或者被同一进程的其他线程取消。
//若thread线程处理JOINABLE状态,则pthread_join将会调用失败。
//线程清理函数注册
void pthread_cleanup_push(void (*rtn)(void *),void *arg);
void pthread_cleanup_pop(int execute);
//以上两个函数成对出现,当出现以下动作时,调用清理函数,调用参数为arg,调用顺序按出栈顺序调用。
1、调用pthread_exit时
2、响应取消请求
3、用非零的execute调用pthread_cleanup_pop
//若调用pthread_cleanup_pop的execute参数为零,清理函数将不会被调用。无论execute是否为零,都将删除栈顶的清理函数。
//线程取消
int pthread_cancel(pthread_t tid);//请求取消线程tid,但是不是马上被取消,与被取消线程有关,被取消线程可以选择忽略取消请求。
//线程分离
int pthread_detach(pthread_t tid);//使线程tid处理分离状态
0 0
- Unix环境高级编程读书笔记-Posix线程
- 《unix环境高级编程》-11.线程-读书笔记
- unix环境高级编程读书笔记 线程同步
- 《UNIX环境高级编程》十一线程读书笔记
- Unix环境高级编程读书笔记(线程)
- 《UNIX环境高级编程》第11章线程【读书笔记】
- 《UNIX环境高级编程》 第12章 线程控制 【读书笔记】
- 《UNIX环境高级编程》读书笔记之线程(1)
- 《UNIX环境高级编程》读书笔记之线程(2)
- unix环境高级编程读书笔记-线程同步属性
- 《UNIX环境高级编程》十二线程控制读书笔记
- UNIX环境高级编程读书笔记
- UNIX环境高级编程读书笔记
- Unix 环境高级编程-读书笔记
- UNIX环境高级编程---读书笔记
- 读书笔记《高级UNIX环境编程》
- [Unix环境高级编程] 线程
- unix环境高级编程---线程
- 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题
- 常用的字符串截取
- nginx 使用fastdfs-nginx-module 比直接使用nginx的优势在哪
- FORM表单提交
- ucosIII 系统任务占用的优先级
- Unix环境高级编程读书笔记-Posix线程
- CLLocationManager定位服务
- cuda 编程指南
- 第十周 二叉树算法库
- UIControl的介绍和使用
- java 集合小记
- iskindofclass 和 ismemberofclass 的区别
- 解决MyEclipse相同词没有提示问题
- Android内存优化(使用SparseArray和ArrayMap代替HashMap)