Unix环境高级编程读书笔记-Posix线程
2015-12-30 10:04
274 查看
线程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处理分离状态
相关文章推荐
- Python 1.4 条件判断
- Java报表工具简介
- C# 条形码操作【源码下载】
- 分享PHP守护进程类
- 获取Java项目的绝对根地址
- 错误:java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
- java 动态代理 [Java Dynamic Proxy]
- 安卓状态栏通知Notification,NotificationManager详解
- Qt使用教程之创建移动应用程序(一)
- PHP实现敏感词过滤系统
- GDB 调试
- php 数组中包含中文转json乱码处理
- PHP 汉字转拼音 utf-8
- 使用php扩展trie_filter,利用词库,过滤敏感词
- php中计算二维数组中某一元素之和
- Eclipse远程调试JAVA程序
- php文件上传大小限制的修改方法大全
- 如何写php守护进程(Daemon)
- c#老化测试程序
- Spring集成MyBatis