1、多线程基础
- 多线程是为了实现多个任务并发的问题,能够实现多个阻塞任务同时进行
- 线程是粒度更小的任务执行单元
- 进程是资源分配的基本单位,线程是任务处理器进行任务调度的最小单位
- 一个进程可以拥有多个线程,同一个进程的多个线程共享进程的资源
- 线程是共用进程的资源,因此开销较小
- 由于多个线程使用的是同一个进程资源,因此在使用资源时,会产生资源抢占的问题
- 每个进程至少有一个线城:主线程
2、多线程编程(重点)
头文件:#include<pthread.h>
编译时:需加上 -lpthread,链接上对应的线程支持库
2.1、创建线城:pthread_create
c
#include <pthread.h> //头文件
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *
(*start_routine) (void *), void *arg);
功能:创建一个分支线程
参数1:线程号,通过参数返回,用法:在外部定义一个该类型的变量,将地址传递入函数,调用结
束后,该变量中即是线程号
参数2:线程属性,一般填NULL,让系统使用默认属性创建一个线程
参数3:是一个回调函数,一个函数指针,需要向该参数中传递一个函数名,作为线程体执行函数
该函数由用户自己定义,参数是void*类型,返回值也是void *类型
参数4: 是参数3的参数,如果不想向线程体内传递数据,填NULL即可
返回值:成功返回0,失败返回一个错误码(非linux内核的错误码,是线程支持库中定义的一个错
误码)
Compile and link with -pthread. //编译时需要加上 -pthread选项
2.2、线程号的获取:pthread_self
c
#include <pthread.h>
pthread_t pthread_self(void);
功能:获取当前线程的线程号
参数:无
返回值:返回调用线程的id号,不会失败
2.3、线程号的退出函数:pthread_exit
c
#include <pthread.h>
void pthread_exit(void *retval);
功能:退出当前线程
参数:表示退出时的状态,一般填NULL
返回值:无
2.4、线程的资源回收:pthread_join
c
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
功能:阻塞回收指定线程的资源
参数1:要回收的线程线程号
参数2:线程退出时的状态,一般填NULL
返回值:成功返回0,失败返回一个错误码
2.5、线程分离态:pthread_detach
c
#include <pthread.h>
int pthread_detach(pthread_t thread);
功能:将指定线程设置成分离态,被设置成分离态的线程,退出后,资源由系统自动回收
参数:要分离的线程号
返回值:成功返回0,失败返回一个错误码