1. 线程——(线程间通信:共享的全局变量)
1.1 定义
线程是一个轻量级的进程
是一个任务被创建、调度、消亡的过程
1.2 线程和进程的区别与联系
1. 线程是CPU任务调度的最小单元
2. 进程是操作系统资源分配的最小单元
3. 线程(Thread)是操作系统能够进行运算调度的最小单位,它是程序执行流的最小单元,也是进程内的实际运作单位。线程被包含在进程之中,一个进程可以包含一个或多个线程,每个线程代表进程中的一个执行路径,能够并发或并行执行不同的任务。
1.3 线程的创建
1. 进程的创建:文本段、数据段、系统数据段、内核
2. 线程的创建:栈区独立,其余区域与进程共享
3. 进程中的所有线程
独享:栈区——局部变量、
共享:文本段、数据段、堆区——全局变量/静态变量/字符串常量/malloc空间/代码
1.4 线程的调度
宏观并行、微观串行
1.5 多线程和多进程的优缺点
1. 执行效率
多线程 > 多进程
1.多线程只需在同一进程空间内部切换调度任务
2.多进程需要在不同进程空间来回切换调度任务
2. 安全性
多进程 > 多线程
1.多进程各自独立,一个进程异常结束,不会影响其余进程
2.多线程都在同一进程空间内部,一个线程异常结束,导致进程异常结束,
进程中其余所有线程均会结束
3. 通信能力
多线程 > 多进程
1.多线程可以利用共享空间实现任务通信
2.多进程没有共享空间,所以通信方式比较复杂
4. 通信安全性
多进程 > 多线程
1.多进程没有共享空间,依赖第三方对象完成通信,中间不涉及资源竞争问题
2.多线程有共享空间,多个任务通信会产生资源竞争,需要加锁
2. 线程相关函数接口
对标进程函数接口
1.fork pthread_create
2.exit pthread_exit
3.wait pthread_join
4.getpid pthread_self
2.1 pthread_create
1. 定义
2. 功能
3. 参数
4. 返回值
5. 示例程序
#include "head.h"
void *thread_read(void *arg)
{
int *ptmp = arg;
sleep(1);
printf("*ptmp = %d\n", *ptmp);
return NULL;
}
void *thread_write(void *arg)
{
int *ptmp = arg;
*ptmp = 100;
return NULL;
}
int main(int argc, char const *argv[])
{
pthread_t tid_r;
pthread_t tid_w;
int num = 0;
pthread_create(&tid_r, NULL, thread_read, &num);
pthread_create(&tid_w, NULL, thread_write, &num);
pthread_join(tid_r, NULL);
pthread_join(tid_w, NULL);
return 0;
}
6. 注意
2.2 pthread_self
1. 定义
2. 功能
3. 参数
4. 返回值
5. 示例程序
6. 注意
2.3 pthread_exit
1. 定义
2. 功能
3. 参数
4. 返回值
5. 示例程序
6. 注意
2.4pthread_cancel
1. 定义
2. 功能
3. 参数
4. 返回值
5. 示例程序
6. 注意
2.5 pthread_join
1. 定义
2. 功能
3. 参数
4. 返回值
5. 示例程序
6. 注意
2.6 pthread_attr_init
1. 定义
2. 功能
初始化线程属性为默认属性
3. 参数
4. 返回值
5. 示例程序
6. 注意
2.7 pthread_attr_setdetachstate
1. 定义
2. 功能
设置线程的属性
3. 参数
4. 返回值
5. 示例程序
6. 注意
2.8 pthread_attr_destroy
1. 定义
2. 功能
销毁线程属性
3. 参数
4. 返回值
5. 示例程序
6. 注意