APUE------线程介绍
2016-04-07 13:42
127 查看
线程标识
每一个线程都有ID,但是ID是一个结构体pthread_t来表示的,所以比较只能用相应的函数。#include <pthread.h> int pthread_equal(pthread_t tid1, pthread_t tid2); //返回值:若相等,返回非0数值;否则,返回0
线程可以通过调用pthread_self函数获得自身线程ID
#include <pthread.h> pthread_t pthread_slef(void); //返回值:调用线程的线程ID
线程创建
新增的线程可以通过调用pthread_create函数创建#include <pthread.h> int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *reatrict attr, void *(*start_rtn)(void *), void *restrict arg); //返回值:若成功则返回0;否则,返回错误编号
当线程调用成功时,新线程的ID会被设置成tidp指向的内存单元。attr参数用于定制各种不同的线程属性,一般没有特殊要求则设为NULL;
线程从start_rnt函数的地址开始运行。该函数只有一个无类型指针参数arg如果这个参数有一个以上,则将其打包成一个结构体传入。
线程终止
单个线程有三种方式退出。1. 线程可以简单的从启动例程中返回,返回值是线程的退出码。
2. 线程可以被同一进程的其他线程取消。
3. 线程调用pthread_exit。
#include <pthread.h> void pthread_exit(void *rval_ptr);
rval_ptr参数是一个无类型指针,与传给启动例程的单个参数类型。
#include <pthread.h> int pthread_jion(pthread_t thread, void **rval_ptr); //返回值:若成功,返回0;否则,返回错误编号
调用线程将一直阻塞,直到指定的线程调用pthread_exit、从启动例程中返回或者被取消。如果线程简单的从它的启动例程返回,rval_ptr就包含返回码。如果线程被取消,由rval_ptr指定的内存单元就设设置为PTHREAD_CANCELED。
如果对线程返回值不感兴趣,那么可以把rval_ptr设置为NULL。
线程可以通过调用pthread_cancel函数来请求取消同一进程中的其他线程。
#include <pthread.h> int pthread_cancel(pthread_t tid); //返回值:若成功,返回0;否则,返回错误编号
注意,pthread_cancel并不等待线程终止,它仅仅提出请求。
线程可以安排它退出时需要调用的函数。这样的函数被称为线程处理程序(thread cleanup handler)。处理程序记录在栈中。
#include <pthread.h> void pthread_cleanup_push(void (*rtn)(void *), viod *arg); void pthread_cleanup_pop(int execute);
当线程执行以下动作时,清理函数rtn是由pthread_cleanup_push函数调度的,调用是只有一个参数arg:
1. 调用pthread_exit时;
2. 相应取消请求时;
3. 用非零execute参数调用pthread_cleanup_pop时。
如果execute参数设置为0,清理函数将不被调用。不管发生哪种情况。pthread_cleanup_pop都将删除上次pthread_cleanup_push调用建立的情路处理程序。
可以调用pthread_detach分离线程
#include <pthread.h> int pthread_detach(pthread_t tid); //返回值:若成功,返回;否则,返回错误编号
相关文章推荐
- UIScrollView
- UITextField的使用
- WebRequest请求范例
- HDU 4848 Wow! Such Conquering! 深搜+强剪枝
- lintcode-medium-Unique Binary Search Trees II
- lintcode-medium-Unique Binary Search Trees
- iOS——UIView复习总结
- StringBuffer和StringBuilder的区别
- 解决ADT大量出现"Unexpected value from nativeGetEnabledTags: 0"的问题
- 解决ADT大量出现"Unexpected value from nativeGetEnabledTags: 0"的问题
- 在EXT框架中,使用JS文件设置UEditor文本框,出现新增内容很多,页面变型,不出现滚动条,导致无法进行操作。
- 关于前端页面需要用到特殊的字体,如果UI给的字体语言内码为中文(gb2312),如何解决?
- 微软笔试题4:Buiding in Sandbox
- UILabel 属性
- Lucene 查询中的距离查询(proximity query)
- IOS 开发-UI初级 (二)视图和视图控制器(View,Viewcontroller)
- 学习笔记 - EasyUI官方网站演示
- sectionheadView 跟随UItabview滚动 去掉UItableview headerview黏性
- iOS之UITextField切换焦点
- jd-gui安装