【Linux多线程】LWP和pthread_t

文章目录

  • 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.mzph.cn/news/848168.shtml

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

相关文章

什么是PaaS平台?

随着信息化发展&#xff0c;数字技术与经济社会各个领域的融合逐渐深入&#xff0c;行业需求不断升级&#xff0c;逐渐呈现多样化、复杂性的态势。传统软件开发模式&#xff0c;耗时耗力&#xff0c;已经难以应对企业新形势下的业务需求。面对挑战&#xff0c;PaaS平台以其天然…

工厂车间运用生产管理看板系统的多重优势

在当今竞争激烈的制造业领域&#xff0c;工厂车间不断寻求创新和优化的方法来提高生产效率、质量和管理水平。生产管理看板系统的运用成为了许多工厂的明智选择&#xff0c;它带来了多重显著优势。 一、生产管理看板系统极大地提升了生产过程的可视化程度。 通过生产管理看板系…

nginx代理vue项目路由跳转刷新

常规代理 在我们日常开发中&#xff0c;前端部署到服务器&#xff0c;需要用到nginx部署&#xff0c;简单代理如下&#xff1a; #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid…

怎么把mov格式的视频转换mp4?四种方法教会你mov转MP4!

怎么把mov格式的视频转换mp4&#xff1f;在这个数字化时代&#xff0c;视频已经跻身为生活的核心元素&#xff0c;然而&#xff0c;制作和分享视频时选择合适的格式变得至关重要&#xff0c;在庞大的视频格式库中&#xff0c;我们熟知的包括mov和MP4&#xff0c;它们各有特色&a…

金融科技引领跨境支付新潮流:智慧、速度与安全的完美融合

一、引言 在全球经济日益紧密相连的今天,跨境支付作为连接各国贸易和金融活动的桥梁,正迎来金融科技带来的深刻变革。金融科技以其独特的智慧化、高效化和安全化特性,正逐步渗透到跨境支付的各个环节,为跨境支付领域带来前所未有的创新和发展。本文将探讨金融科技如何引领跨…

mysql高级刷题-01-求中位数

题目&#xff1a; 解题代码 select sum(num) / count(num) as median from (select num,row_number() over (order by num desc,id desc ) as desc_math,row_number() over (order by num ,id ) as asc_mathfrom number) as t1 where asc_math in (desc_math, desc…

前端实现输入内容计算密码强度

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、思路二、计算密码强度分数密码强度动画展示效果完善动画效果完整代码前言 平时我们在浏览各种网站和 APP 的时候,都接触过密码这个东西~ 密码设置的好不好,关乎到你的账号安全性,越复杂的密码越安全,所以密码强度…

微信公众号文章背景颜色改成白色

微信公众号文章背景颜色黑色&#xff0c;看不清字。 按F12 , 找到 rich_media_area_primary &#xff0c;把 background 改成 white .rich_media_area_primary {background: white; }

2024年社会发展与管理创新科学国际学术会议(ICSDMIS 2024)

2024年社会发展与管理创新科学国际学术会议&#xff08;ICSDMIS 2024&#xff09; 2024 International Conference on Social Development and Management Innovation Science&#xff08;ICSDMIS 2024&#xff09; 会议简介&#xff1a; 2024年社会发展与管理创新科学国际学术…

C语言中 printf函数格式化输出

一. 简介 本文来简单学习一下&#xff0c;C语言中printf函数格式化输出时&#xff0c;因为我们的粗心没有 将数据类型与格式化参数对应&#xff0c;而导致的一些问题。 二. C语言中printf函数的格式化输出 在C语言中&#xff0c;printf函数是用于格式化输出的函数&#xff0…

Redis 异常三连环

本文针对一种特殊情况下的Reids连环异常&#xff0c;分别是下面三种异常&#xff1a; NullPointerException: Cannot read the array length because “arg” is nullJedisDataException: ERR Protocol error: invalid bulk lengthJedisConnectionException: Unexpected end o…

NAT端口映射,实现外网访问内网服务器

目录 前言一、搭建网络拓扑1.1 配置server和pc1.1.1 配置server01.1.2 配置server11.1.3 配置pc0 1.2 配置客户路由器1.2.1 配置路由器IP1.2.2 配置静态路由 1.3 配置ISP路由器 二、配置端口映射2.1 在客户路由器配置端口映射2.2 测试公网计算机访问私网服务器2.2.1 PC0向serve…

Base64前端图片乱码转换

title: Base64码乱转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将…

dotenv 配置踩坑-显示undefined

今天在学习dotenv,结果自己按照官方文档巧下来竟然还是不行&#xff0c;人麻了~ 这是我的目录结构 按照配置那么&#xff0c;我们只需要在config.default.js中写入如下代码就可以实现它将环境变量从文件加载到process.env中。 但是&#xff0c;但是这里犯了一个低级错误&#…

通用高电子迁移率晶体管(HEMT)的差分微变解算方案及分析型模型

来源&#xff1a;A Difference-Microvariation Solution and Analytical Model for Generic HEMTs&#xff08;TED 22年&#xff09; 摘要 这篇论文提出了一种AlGaN/GaN和AlGaAs/GaAs基高电子迁移率晶体管(HEMT)的分析型直流模型。该模型考虑了高栅偏压下势垒层中积累的电荷。…

什么?!这年代还有人用父子组件通信?

创作背景 因为本前端菜鸟写代码从没考虑过代码是否易于维护&#xff0c;所以一旦涉及组件通信&#xff0c;一律使用Pinia状态管理&#xff0c;至于父子组件通信啥的&#xff0c;学完Pinia之后就被我狠狠抛弃了&#xff0c;当时就在想&#xff1a;为什么不直接教Pinia&#xff…

YOLO-Worldv2两分钟快速部署

本次部署使用的框架基于ultralytics&#xff0c; 并且已经集成最新版本的YOLOv8框架&#xff1a; 一键环境配置 pip install ultralytics基础使用 训练 from ultralytics import YOLOWorld model YOLOWorld(yolov8x-worldv2.pt) results model.train(datacoco8.yaml, epo…

康谋技术 | 自动驾驶:揭秘高精度时间同步技术(一)

众所周知&#xff0c;在自动驾驶中&#xff0c;主要涵盖感知、规划、控制三个关键的技术层面。在感知层面&#xff0c;单一传感器采集外界信息&#xff0c;各有优劣&#xff0c;比如摄像头采集信息分辨率高&#xff0c;但是受外界条件影响较大&#xff0c;一般缺少深度信息&…

算法导论 总结索引 | 第三部分 第十四章:数据结构的扩张

1、通过存储 额外信息的方法来扩张一 种标准的数据结构&#xff0c;然后对这种数据结构&#xff0c;编写新的操作来支持所需的应用。因为添加的信息 必须要能被该数据结构上的常规操作更新和维护 2、通过扩张红黑树构造出的两种数据结构&#xff1a;14.1介绍 一种支持一般动态…

从迷茫到精通,小李的IPD培训‘逆袭’之路!——精益咨询

谈及IPD培训&#xff0c;这确实是一个让小李心生敬畏而又充满期待的词汇。作为刚刚踏上这段“奇幻”旅程的小白&#xff0c;小李深感其不仅是一场知识的狂欢&#xff0c;更是一次思维的洗礼和团队的熔炼。 IPD&#xff0c;全称集成产品开发&#xff0c;它代表着一种前沿的产品…