Linux——线程详解

本文详细介绍了Linux线程的基础概念,包括线程的共享与独有资源,多进程与多线程的优缺点。接着讨论了线程的创建、终止、等待和分离,并讲解了线程安全的实现,如互斥锁和条件变量。最后探讨了线程的应用,如线程池和线程安全的单例模式。

目录

1. 线程的概念

1.1 基本概念

1.2 线程之间的独有与共享

1.3 多进程与多线程多任务处理优缺点分析

2. 线程控制(线程创建、终止、等待、分离)

2.1 创建线程

2.2 线程终止

2.3 线程等待

2.4 线程分离

3. 线程安全

3.1 线程间的互斥

3.2 线程间的同步

4.线程的应用

4.1 线程池

4.2 线程安全的单例模式

4.3 STL,智能指针和线程安全


1. 线程的概念

1.1 基本概念

线程是进程中的一条执行流,是CPU调度的基本单位,一个进程中可以有多个线程

Linux下的线程执行流是通过pcb实现的,且一个进程中可能有多个pcb,并且这些pcb共享同一个进程中的大部分资源,因此,也被称为轻量级进程

Linux下,线程是CPU调度的基本单位,进程是系统进行资源分配的基本单位

1.2 线程之间的独有与共享

共享:虚拟地址空间(代码段和数据段)、文件描述符表、信号处理方式、工作路径

独有:线程栈、寄存器、信号屏蔽字、优先级、errno、线程标识符-ID

1.3 多进程与多线程多任务处理优缺点分析

共同优点:

在CPU资源足够的情况下都可以实现并行的任务处理,提高效率

IO密集型程序(程序中进行大量的IO操作,对CPU资源要求不高)中,同时发起IO操作减少IO阻塞时间

CPU密集型程序(程序中进行大量的数据运算,对CPU资源要求高)中,执行流的数量并不是越多越好,多了反而会增加调度成本

多线程进行多任务

优点:

(1)共享虚拟地址空间,因此线程间通信更加灵活(还可以通过全局变量、函数传参来实现通信)

(2)线程的创建和销毁成本更低

(3)同一个进程中的线程调度切换成本更低

缺点:健壮性低,有些调用和异常是针对整个进程产生的

例如:exit接口,进程退出会使进程中的所有线程都退出

大多数情况下,使用多线程,在稳定性要求高的场景中使用多进程

2. 线程控制(线程创建、终止、等待、分离)

我们操作线程的接口都是库函数,需要引入头文件<pthread.h>

链接这些线程函数库时要使用编译器命令的"-lpthread"选项

2.1 创建线程

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void* ), void *arg);

在用户态创建一个用户线程

thread:用于获取线程ID

attr:设置线程属性,设置为NULL,表示默认属性

start_routine:线程的入口函数

arg:通过线程入口函数给线程传递的参数

返回值:成功返回0,失败返回错误码

2.2 线程终止

(1)线程入口函数中执行return(线程入口函数运行完毕,线程退出)

(2)调用pthread_exit终止自己

(3)调用pthread_cancel终止同一进程中的另一个线程

void pthread_exit(void *value_ptr);

可以在任意位置,哪个线程调用哪个线程退出

int pthread_cancel(pthread_t thread);

thread:一个指定的线程ID

传入谁的ID谁退出

返回值:成功返回0,失败返回错误码

注意:主线程退出并不会导致进程退出(进程资源被释放),只有所有线程退出了进程才会退出

2.3 线程等待

线程默认情况下退出后,资源不会被回收,需要被其他线程等待,获取退出线程的返回值释放资源。

线程也不是必须被等待,在线程属性中,有一个分离属性,默

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值