- 线程
1.1 定义
线程是一个轻量级的进程
是一个任务被创建、调度、消亡的过程
1.2 线程和进程的区别与联系
-
线程是CPU任务调度的最小单元
-
进程是操作系统资源分配的最小单元
-
线程(Thread)是操作系统能够进行运算调度的最小单位,它是程序执行流的最小单元,也是进程内的实际运作单位。线程被包含在进程之中,一个进程可以包含一个或多个线程,每个线程代表进程中的一个执行路径,能够并发或并行执行不同的任务。
1.3 线程的创建
-
进程的创建:文本段、数据段、系统数据段、内核
-
线程的创建:栈区独立,其余区域与进程共享
-
进程中的所有线程
独享:栈区------局部变量、
共享:文本段、数据段、堆区------全局变量/静态变量/字符串常量/malloc空间/代码
1.4 线程的调度
宏观并行、微观串行
1.5 多线程和多进程的优缺点
- 执行效率
多线程 > 多进程
1.多线程只需在同一进程空间内部切换调度任务
2.多进程需要在不同进程空间来回切换调度任务
- 安全性
多进程 > 多线程
1.多进程各自独立,一个进程异常结束,不会影响其余进程
2.多线程都在同一进程空间内部,一个线程异常结束,导致进程异常结束,
进程中其余所有线程均会结束
- 通信能力
多线程 > 多进程
1.多线程可以利用共享空间实现任务通信
2.多进程没有共享空间,所以通信方式比较复杂
- 通信安全性
多进程 > 多线程
1.多进程没有共享空间,依赖第三方对象完成通信,中间不涉及资源竞争问题
2.多线程有共享空间,多个任务通信会产生资源竞争,需要加锁
- 线程相关函数接口
对标进程函数接口
1.fork pthread_create
2.exit pthread_exit
3.wait pthread_join
4.getpid pthread_self
2.1 pthread_create
-
定义
-
功能
-
参数
-
返回值
-
示例程序
-
注意
2.2 pthread_self
-
定义
-
功能
-
参数
-
返回值
-
示例程序
-
注意
2.3 pthread_exit
-
定义
-
功能
-
参数
-
返回值
-
示例程序
-
注意
2.4pthread_cancel
-
定义
-
功能
-
参数
-
返回值
-
示例程序
-
注意
2.5 pthread_join
-
定义
-
功能
-
参数
-
返回值
-
示例程序
-
注意
2.6 pthread_attr_init
-
定义
-
功能
初始化线程属性为默认属性
-
参数
-
返回值
-
示例程序
-
注意
2.7 pthread_attr_setdetachstate
-
定义
-
功能
设置线程的属性
-
参数
-
返回值
-
示例程序
-
注意
2.8 pthread_attr_destroy
-
定义
-
功能
销毁线程属性
-
参数
-
返回值
-
示例程序
-
注意
-
互斥锁
3.1 引用互斥锁的原因:利用全局变量能够实现两个线程任务通信,线程任务通信操作全局变量可能会引发资源竞争,为避免资源竞争,引入互斥锁机制
3.2 定义
互斥锁可以理解为是一种资源,一旦互斥锁被加锁,另外的线程任务无法继续加锁,必须等待互斥锁被解锁,另外的任务才能加锁
3.3 临界资源(临界区)
加锁和解锁中间的代码(资源)称为临界资源(临界区),同一时刻,临界资源不能被同时执行
- 互斥锁相关函数接口
4.1 pthread_mutex_init
-
定义
-
功能
初始化一个互斥锁
-
参数
-
返回值
-
示例程序
-
注意
4.2 pthread_mutex_lock
-
定义
-
功能
上锁
-
参数
-
返回值
-
示例程序
-
注意
4.3 pthread_mutex_unlockk
-
定义
-
功能
解锁
-
参数
-
返回值
-
示例程序
-
注意
4.4 pthread_mutex_destroy
-
定义
-
功能
销毁锁资源
-
参数
-
返回值
-
示例程序
-
注意