Linux——线程

1.线程概念

线程是什么:是进程内部的一条执行流,是CPU调度的基本单元。

本质:Linux下线程的本质就是task_struct

Linux下的这个调度单元就是pcb,而这个pcb相较于传统操作系统设计的pcb更加轻量,因此Linux下的线程也被称为轻量级进程

2.进程和线程区别:

从功能性质上的差别:

进程:是系统进行资源分配的基本单元;

线程:是系统中进行CPU调度的基本单元

使用上的差别:针对多任务的处理

多进程:资源消耗成本更高,稳定性更高

多线程:资源消耗的成本更低,调度切换成本更低,线程间通信更加方便,执行粒度更加细致

3.线程间的共享和独有:

共享:进程ID,虚拟地址空间+页表,打开的文件信息,信号信息,进程间通信描述信息....

独有:线程ID,调度上下文信息,线程栈空间.....

4.线程的控制:

Linux下的线程是大佬们封装的一套库函数实现的控制操作的一个函数库

pthread_create ->clone(pcb)

**用户态线程:**针对线程上层封装描述后的执行流+数据的整体

相对独有的数据:用户态线程ID 线程栈内部的局部数据 用户态控制的描述信息

**内核态线程:**就指的是pcb-task_struct

(1)线程创建

pthread_create(&tid,&attr,Func,arg)

LWP:轻量级进程ID

ps -L:进行查看轻量级进程信息

轻量级进程ID:就是task_struct里边的pid,每个轻量级进程唯一的

pthread_t线程ID:虚拟地址空间中线程独有线程描述空间的地址

(2)线程退出

  • 线性入口函数中return(线程入口函数运行完毕,线程就会退出)
  • void pthread_exit(void* retval); 在线程内部调用的任意函数中调用都可以退出线程
  • void pthread_cancel(pthread_t tid);取消一个线程
  • 被取消的线程,它的返回值没有参考意义的(是一个固定值:PTHREAD_CABCELED)

(3)线程等待

等待指定线程退出,获取返回值,释放它的所有资源

int pthread_join(pthread_t tid,void** retval);

(4)线程分离

设置线程的分离属性:从joinable设置为detach状态

线程一旦被分离,线程退出后,就会自动释放所有的资源,不需要被等待,也不能被等待

void pthread_detach(pthread_t tid);

应用场景:当我们不关系一个线程的返回值,而且也不希望阻塞在等待上,则使线程分离

5.线程安全

多个线程之间对同一份临界资源的访问安全性要求

如何实现:同步+互斥;

互斥的实现:互斥锁

同步的实现:条件变量,信号量

读写锁

自旋锁

锁的种类

死锁

生产者消费者模型

读者写者模型

1.什么是并发,什么是并行?

相关推荐
小此方1 小时前
Linux网络(一):揭秘从网络发展哲学到 TCP/IP 协议栈分层设计的设计哲学
linux·网络·tcp/ip
星野爱8951 小时前
远程控制哪家安全性更高?ToDesk、UU远程、向日葵隐私屏深度测评!
linux·运维·网络
ALINX技术博客1 小时前
【黑金云课堂】FPGA技术教程Linux开发:系统定制
linux·运维·fpga开发
ShineWinsu1 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
2601_965798472 小时前
How to Build a Custom Artisan Store on WordPress: Crafti Theme Review
linux·服务器·数据库
mounter6252 小时前
深度解析 Linux 内核中的 iomap 子系统:历史、演进、核心机制与未来
linux·文件系统·linux kernel·kernel·iomap
养海绵宝宝的小蜗4 小时前
LVS(Linux Virtual Server)项目知识点总结
linux·运维·lvs
阿黎02145 小时前
Linux驱动
linux
tjjingpan5 小时前
HCIP-Datacom Core Technology V1.0_20 IPv6概述
linux·服务器·网络
云泽8085 小时前
Linux基础开发工具(三):Vim高级配置、Swap恢复机制与Sudo权限白名单详解
linux·运维·vim