文章目录
- 一、ps -L 指令🍎
- 二、线程控制
一、ps -L 指令🍎
- 🐧 使用
ps -L
命令查看轻量级进程信息; - 🐧
pthread_self()
用于获取用户态线程的tid
,而并非轻量级进程ID; - 🐧
getpid()
用于获取当前进程的id
,而并非某个特定轻量级进程;
二、线程控制
🍎
Linux
操作系统不会直接提供给我们线程的系统调用,只会提供轻量级进程的系统调用。
🍎 将轻量级进程的接口进行封装,给用户在应用层封装一个pthread
线程库。
几个细节知识点:🔍
- 什么叫做主线程呢 ?🍎
主线程:通常指的是程序启动时最初创建并执行的线程,即从
main
函数开始执行的线程。CPU 调度的基本单位是线程,PID == LWP
的线程叫做 主线程。
- 简述什么是 LWP ?🍎
LWP
:是轻量级进程,在Linux
下进程是资源分配的基本单位,线程是CPU
调度的基本单位,而线程使用进程pcb
描述实现,并且同一个进程中的所有pcb
共用 同一个虚拟地址空间,因此相较于传统进程更加轻量化。
- 请简述
LWP
与pthread_create
创建的线程之间的关系 ? 🍎
pthread_create
是一个库函数,功能是在用户态创建一个用户线程,而这个线程的运行调度是基于一个 轻量级进程 实现的。
- 请简述轻量级进程ID与进程ID之间的区别 ?🍎
因为
Linux
下的轻量级进程是一个pcb
,每个轻量级进程都有一个自己的轻量级进程ID
(pcb
中的pid
),而同一个程序中的轻量级进程组成线程组,拥有一个共同的线程组ID
。
- 共享资源、临界区、临界资源的区别 ? 🍎
①🐧 共享资源:表示能被多个执行流同时访问的资源;
②🐧 临界区:对临界资源进行操作的代码段;
③🐧 临界资源:同一时间只能有一个执行流访问访问的共享资源;
- 对
mutex
的理解 ?🍎
mutex
简单理解就是一个0/1
计数器,用于标记资源访问状态;
0
表示已经有执行流加锁成功,资源处于不可访问;
1
表示未加锁,资源可访问;
- 请简述什么是线程互斥,为什么需要互斥 ? 🍎
线程互斥指的是多个线程间对临界资源进行争夺访问时有可能会造成数据的二义性,因此通过保证同一时间只有一个线程能够访问临界资源的方式实现线程对临界资源的访问安全性。
pthread_create
创建一个线程 🔍