【Linux多线程】LWP和pthread_t

news2025/1/20 10:49:46

文章目录

  • LWP
    • clone系统调用
    • 查看线程LWP
    • 理解LWP与TID
  • pthread_id

LWP

LWP是Linux中线程的具体实现形式,在linux中,进程和线程本质上都是相同的,都是通过task_struct结构体来表示的。LWP是内核级线程TID是其唯一标识符,类似于进程的PID。每当使用pthread_create创建一个线程时,在底层内核会生成一个LWP实体,就跟创建进程时会生成PCB实体一样,只不过LWP更轻量。除此之外,pthread_create还会在用户空间上生成pthread_t类型的标识符,用来与内核级线程LWP建立一一对应的关系(实际上是与TID建立映射)。整个映射过程由POSIX线程库实现。

clone系统调用

那么pthread_create又是如何生成一个内核级的线程LWP呢?

库函数pthread_create底层封装了一个系统调用clone。clone允许指定新线程应共用哪些资源。通过clone可以生成一个LWP。clone函数原型如下:

int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...);

在这里插入图片描述

  • fn是一个函数指针表示新线程执行的函数
  • child_stack 新线程的栈指针
  • flags 标记位,指定线程共享哪些资源
  • arg是传递给新线程的参数

查看线程LWP

使用指令ps -L可以查看所有的线程
在这里插入图片描述
其中LWP是轻量级进程ID,即线程ID(TID)
ps指令可以使用以下选项查看进程和线程:

  • -e显示所有进程
  • -L显示所有线程
  • -f显示完整的格式信息,包括PID、PPID、LWP等

此外还可以使用pstree命令以树状结构显示进程和线程信息

pstree -p <pid>
  • -p显示PID包括LWP

理解LWP与TID

LWP本质是一个描述线程的一个概念,因为linux中没有单独为线程设计一套管理方案,又为了与进程PCB区分开(进程和线程实际上都被看作是task_struct的实例),就用LWP来表示线程。LWP和普通进程一样,由内核调度和管理。而TID是内核用来标识LWP的唯一标识符

pthread_id

pthread_id是POSIX线程库中一个线程标识符类型(无符号整数类型),pthread_create在内核创建LWP之后,内核会提供给用户一个pthread_id用于标识和操作该线程尽管pthread_id与TID在概念上都是标识线程,但是它们属于不同层次。 其实这里的pthread_idTID的关系就和文件描述符fdinode的关系。前者用于用户操作(如等待线程结束、取消线程等),后者用于内核管理。pthread_id与LWP一一对应。这也就意味着线程库能通过对pthread_id操作进而实现对LWP的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度网络学习笔记(一)——self-attention机制介绍和计算步骤

self-attention机制介绍及其计算步骤 前言一、介绍和意义二、 计算细节2.1 计算Attention Score2.2 计算value2.3 计算关联结果b2.4 统一计算 三、总结 前言 Transformer是一种非常常见且强大的深度学习网络架构&#xff0c;尤其擅长处理输出为可变长度向量序列的任务&#xf…

杂项——STM32ZET6要注意的一些问题——高级定时器问题和PB3,PB4引脚问题

ZET6可能会用到定时器&#xff0c;高级定时器要输出PWM要加上这样一行代码&#xff0c;否则无法正常输出PWM波 TIM_CtrlPWMOutputs(TIM8, ENABLE); // 主输出使能&#xff0c;当使用的是通用定时器时&#xff0c;这句不需要 ZET6中PB3,PB4引脚默认功能是JTDO和NJTRST,如果想将…

python基础篇(2):字符串扩展知识点

1 字符串的三种定义方式 字符串在Python中有多种定义形式&#xff1a; &#xff08;1&#xff09;单引号定义法 name 博主帅绝上下五千年 print(name) print(type(name)) 效果如下&#xff1a; &#xff08;2&#xff09;双引号定义法 name "博主帅绝上下五千年&qu…

代课老师可以评职称吗?

代课老师可以评职称吗&#xff1f;这个问题颇具争议。代课老师由于其工作性质的特殊性&#xff0c;往往处于职称评审的边缘地带 代课老师&#xff0c;承担着临时或短期的教学任务&#xff0c;填补因各种原因造成的教师空缺。他们的工作性质决定了他们与正式教师在职责和角色上存…

【uni-app】开发问题汇总

文章目录 1、APP获取dom2、添加页面&#xff0c;参考其他页面&#xff0c;国际化就是对应页面的导航的国际化"navigationBarTitleText": "%m.i.ForgetPaymentPassword.bartitle%",3、setStatusBarStyle这个导航栏设置方法不要了&#xff0c;导航栏现在都用…

66、API攻防——接口安全阿里云KEYPostmanDVWS

文章目录 一、工具使用——Postman自动化测试二、安全问题——Dvws泄露&鉴权&XXE三、安全问题——阿里KEY信息泄露利用 dvws-node 一、工具使用——Postman自动化测试 二、安全问题——Dvws泄露&鉴权&XXE 路径中出现/api/&#xff0c;一般都是接口。 请求包是…

Cesium项目报错An error occurred while rendering. Rendering has stopped.

一般就是本地打开会报错&#xff0c;改成用本地服务器打开 全局安装一个live-server sudo cnpm i live-server -g然后新增一个package.json文件 npm init -y然后在package.json的scripts中增加一个命令 "server": "live-server ./ --port8181 --hostlocalhos…

香橙派 AIpro 的系统评测

0. 前言 你好&#xff0c;我是悦创。 今天受邀测评 Orange Pi AIpro开发板&#xff0c;我将准备用这个测试简单的代码来看看这块开发版的性能体验。 分别从&#xff1a;Sysbench、Stress-ng、PyPerformance、RPi.GPIO Benchmark、Geekbench 等方面来测试和分析结果。 下面就…

第15章 面向服务架构设计理论实践

服务是一个由服务提供者提供的&#xff0c;用于满足使用者请求的业务单元。服务的提供者和使用者都是软件代理为了各自的利益而产生的角色。 在面向服务的体系结构(Service-Oriented Architecture,SOA)中&#xff0c;服务的概念有了延伸&#xff0c;泛指系统对外提供的功能集。…

纷享销客BI智能分析平台技术架构介绍

纷享销客BI智能分析平台致力于降低用户上手门槛&#xff0c;无缝继承纷享销客PaaS平台的对象关系模型和权限体系&#xff0c;让使用纷享CRM的营销人员、销售人员、服务人员等各类角色人员都能够将分析场景与业务场景相融合&#xff0c;将数据思维融合到自己的日常工作、团队工作…

【笔记】半车垂向振动模型

模型如下 半车振动模型,被动悬架 力学推导 代码 %书第135页 clc clear close all %% 1.车辆参数 ms=690; Isy=1222; mwf=40.5; mwr=45.4; Ksf=17000; Ksr=22000; Csf=1500; Csr= 1500; Kwf= 192000; Kwr= 192000; a= 1.25; b= 1.51; L=a+b; %% 2.状态方程 A=[0 0 0…

今日科普:了解、预防、控制高血压

高血压&#xff0c;常被称为“隐形的健康威胁”&#xff0c;许多患者可能在毫无预警的情况下发病&#xff0c;且患病率逐年攀升&#xff0c;同时患者群体逐渐年轻化&#xff0c;高血压虽然难以根治&#xff0c;但并不可怕&#xff0c;真正可怕的是血压长期居高不下&#xff0c;…

【一百零一】【算法分析与设计】差分,1109. 航班预订统计,P4231 三步必杀,P5026 Lycanthropy

1109. 航班预订统计 这里有 n 个航班&#xff0c;它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings &#xff0c;表中第 i 条预订记录 bookings[i] [first(i), last(i), seats(i)] 意味着在从 first(i) 到 last(i) &#xff08;包含 first(i) 和 last(i) &#xff09;…

【ArcGISPro SDK】构建多面体要素

结果展示 每个面构建顺序 代码 using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework;…

JVM学习-内存泄漏

内存泄漏的理解和分类 可达性分析算法来判断对象是否是不再使用的对象&#xff0c;本质都是判断一上对象是否还被引用&#xff0c;对于这种情况下&#xff0c;由于代码的实现不同就会出现很多内存泄漏问题(让JVM误以为此对象还在引用&#xff0c;无法回收&#xff0c;造成内存泄…

写一个盲盒模拟器

最近想写一个小程序&#xff0c;随便写一个玩吧&#xff0c;先想了下功能&#xff1a; 1.有很多盲盒&#xff0c;可以选择模拟开启 2.自定义盲盒&#xff0c;我们可以自定义制作盲盒自己玩 3.用户界面&#xff0c;记录盲盒历史&#xff0c;可以给坏越提意见 所用技术栈&…

数据库 mysql 的彻底卸载

MySQL卸载步骤如下&#xff1a; &#xff08;1&#xff09;按 winr 快捷键&#xff0c;在弹出的窗口输入 services.msc&#xff0c;打开服务列表。 &#xff08;2&#xff09;在服务列表中&#xff0c; 找到 mysql 开头的所有服务&#xff0c; 右键停止&#xff0c;终止对应的…

拉普拉斯算子

问Chat GPT两种不同拉普拉斯算子的区别&#xff1a;

打印机的ip不同且连不上

打印机的ip不同且连不上 1.问题分析2.修改网段3.验证网络 1.问题分析 主要是打印机的网段和电脑不在同一个网段 2.修改网段 3.验证网络

springcloudalibaba项目注册nacos1.4.2,在nacos上修改配置项不生效问题

背景 之前的项目启动正常,后来发现springcloudalibaba的各版本匹配不正确,于是对项目中的springboot、springcloud、springcloudalibaba版本进行匹配升级,nacos1.4.2匹配的springboot、springcloud、springcloudalibaba版本与我的项目中的版本比较接近,于是我便重新安装了…