多线程编程
1:多线程相关基础知识
线程就是进程里的干活的东西 也是轻量级的进程
线程共享进程的资源 没有独立的资源
线程的优点
启动线程消耗的资环更少
线程的切换要比进程的切换快
维护线程花费的资源要比维护进程划分的资源更少
线程的通讯比进程的通讯更简单 因为线程共享数据
线程的缺点
一死俱死
如何选择线程还是进程
频繁切换时候 用线程
大量的数据计算 用线程
操作相关性比较大 用线程 相关性比较小用进程
都满足 优先选择你最拿手的
2:线程相关的API
函数的功能:
获取线程号
函数的头文件
pthread.h
函数的原型
pthread_t pthread_self(void);
函数的返回值:
成功返回 线程的id
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的功能:(重点)
创建一个线程
函数的头文件
#include <pthread.h>
函数的原型
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
函数的参数
pthread_t *thread, 用来存放线程的ID的变量
const pthread_attr_t *attr, 线程的属性 NULL表示使用默认属性
void *(*start_routine) (void *), :线程的回调函数
void *arg :传给回调函数的参数
函数的返回值
成功返回 0
失败返回 错误码
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的功能:
退出线程
函数的头文件
pthread.h
函数的原型
void pthread_exit(void *retval);
函数的参数
void *retval:0表示正常退出
函数的返回值
无
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的功能:
等待线程的退出
函数的头文件
pthread.h
函数的原型
int pthread_join(pthread_t thread, void **retval);
函数的参数
pthread_t thread, 要等待的线程的id
void **retval 退出的状态 一般填NULL
函数的返回值
成功返回 0
失败返回 非零
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的功能:
取消一个线程的执行
函数的头文件
pthread.h
函数的原型
int pthread_cancel(pthread_t thread);
函数的参数
pthread_t thread:要取消的线程的ID
函数的返回值
成功返回 0
失败返回 错误码
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++4
函数的功能
退出清理函数
函数的头文件
pthread.h
函数的原型
void pthread_cleanup_push(void (*routine)(void *),
void *arg);
void pthread_cleanup_pop(int execute);
函数的参数:
void (*routine)(void *), 退出清理函数的回调函数 返回任意指针void*;
void *arg :传给回调函数的参数
int execute:是否调用退出清理函数
0 不调用 不执行
1 调用 进行执行
+++++++++++++++++++++++++++
退出清理函数的特点
1:当线程被取消执行的时候 不调用退出清理函数
2:在pthread_cleanup_pop函数之前假如结束了线程的执行
无论使能的参数是0 还是1 都会调用退出清理函数