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处理分离状态




0 0
原创粉丝点击