1.今日完成任务
线程池的书写
2.用到的线程函数
1.pthread_create函数:创建线程
头文件:#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
pthread_t *thread:传递一个pthread_t变量地址进来,用于保存新线程的tid(线程ID)
const pthread_attr_t *attr:线程属性设置,如使用默认属性,则传NULL
void *(*start_routine) (void *):函数指针,指向新线程应该加载执行的函数模块
void *arg:指定线程将要加载调用的那个函数的参数
返回值:成功返回0,失败返回错误号。
2.pthread_self函数:获取调用线程tid
头文件:#include <pthread.h>
pthread_t pthread_self(void);
3.pthread_exit函数:调用线程退出函数
void pthread_exit(void *retval);
void *retval:线程退出时传递出的参数,可以是退出值或地址,如是地址时,不能是线程内部申请的局部地址。
注意和exit函数的区别,任何线程里exit导致进程退出,其他线程
未工作结束,主控线程退出时不能return或exit。
4.pthread_join函数:阻塞退出,回收尸体
int pthread_join(pthread_t thread, void **retval);
pthread_t thread:回收线程的tid
void **retval:接收退出线程传递出的返回值
返回值:成功返回0,失败返回错误号
5.pthread_cancel函数:在进程内某个线程可以取消另一个线程。
int pthread_cancel(pthread_t thread);
被取消的线程,退出值,定义在Linux的pthread库中常数PTHREAD_CANCELED的值是-1。
可以在头文件pthread.h中找到它的定义:
#define PTHREAD_CANCELED ((void *) -1)
6.pthread_detach函数:自己杀自己然后自己收尸
int pthread_detach(pthread_t tid);
pthread_t tid:分离线程tid