7月7日笔记-线程
2015年07月07日
学习内容出自:一步步学习Linux多任务编程
- 进程和线程的区别与联系
进程:只是维护应用程序所需的各种资源 线程:执行实体
- 多线程实现多任务
线程号只在它所属的进程环境中有效
获取线程号: pthread_t pthread_self(void);
线程号的比较:int pthread_equal(pthread_t t1,pthread_t t2);
返回值:相等则非0
线程的创建:
int pthread_create(pthread_t *thread,const pthread_attr_t *addr,void *(*start_routine)(void *),void *arg);
回收线程
1、阻塞
int pthread_join(pthread_t thread,void **retval)
retval:用来存储线程退出状态的指针的地址
2、非阻塞函数回收资源
int pthread_datach(pthread_t thread);
使调用线程与当前线程分离,当被分离的线程结束后,系统会自动回收它的资源
线程的退出
void pthread_exit(void *retval);
retval:存储线程退出状态的指针
- 线程私有数据
其中一个线程对全局变量的修改将影响到另一个线程的访问
创建线程私有数据
int pthread_key_create(pthread_key_t *key,void (*destructor)(void*));
注销线程的私有数据
int pthread_key_delete(pthread_key_t key);
设置线程私有数据关联
int pthread_setspecific(pthread_key_t key,const void *value);
注:是将key与value的值(而不是内容相关联)
读取线程私有数据所关联的值
void *pthread_getspecific(pthread_key_t key);
- 线程池
线程池的组成:线程管理器、工作线程、任务接口、任务队列
需创建线程池的情况:创建线程和销毁时间相比任务执行时间多很多