线程相关函数
(在Linux中要使用线程需要借助第三方库 ----- pthread线程库,多线程代码编译时需要添加线程库 -pthread)
- 创建线程(pthread_create函数)
头文件:
#include <pthread.h>
原型:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
返回值:
成功返回0,失败返回错误
参数:
thread - 传出参数,传出创建线程的ID
attr - 线程属性,给NULL表示使用默认属性
start_rountine - 线程函数,启动线程后会去执行的代码
arg - 传递给线程函数的参数
- 线程结束(pthread_exit函数)
头文件:
#include <pthread.h>
原型:
void pthread_exit(void *retval);
参数:
retval — 线程的返回值
- 等待线程结束(pthread_join函数)(阻塞函数)
头文件:
#include <pthread.h>
返回值:
成功返回0,失败返回错误
int pthread_join(pthread_t thread, void **retval);
参数:
thread - 要等待线程ID
retval - 传出参数,传出退出线程的退出值
- 线程的分离状态(pthread_detach函数)
头文件:
#include <pthread.h>
原型:
int pthread_detach(pthread_t thread);
(注:一个线程要么就使用pthread_join去回收资源,要么设置为分离状态;既不是分离状态也没有join的线程的资源没有保证)
参数:
thread — 要设置分离状态的线程ID
- 线程的取消(pthread_cancel函数)
头文件:
#include <pthread.h>
原型:
int pthread_cancel(pthread_t thread);
(注:很多系统函数在执行过程中不能取消,等这些函数执行完之后才能取消)
参数:
thread — 要取消的线程ID
- 线程的退出处理函数(pthread_cleanup_push/pthread_cleanup_pop函数)
头文件:
#include <pthread.h>
原型:
void pthread_cleanup_push(void (*routine)(void *),void *arg);
void pthread_cleanup_pop(int execute);
(注:pthread_cleanup_push()/pthread_cleanup_pop()是两个宏,两个宏内部分别包含 { 和 };这两个函数必须成对出现)
(如果不希望pop函数执行,将该函数的调用语句写到线程退出代码之后)
以下情况线程退出处理函函数会被自动调用
1)线程中调用pthread_exit函数退出线程
2)线程被取消(pthread_cancel)
参数:
routine - 退出处理函数
arg - 传递给退出处理函数的参数
exeute - 决定取出后函数是否执行
0 - 不执行
非0 - 执行