您的位置:首页 > 编程语言

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处理分离状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: