linux下的线程

概念理解

linux下没有线程的概念,只有轻量级进程的概念,

有接口:clone()

是clone()调用,在库中创建栈

源码解析

cpp 复制代码
 int clone(int (*fn)(void *), void *child_stack,
                 int flags, void *arg, ...
                 /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );

       /* Prototype for the raw system call */

       long clone(unsigned long flags, void *child_stack,
                 void *ptid, void *ctid,
                 struct pt_regs *regs);

图示解析

tid叫做线程控制块在线程库中的地址

Linux中的线程一般叫做用户级线程,必须依靠底层的lwp(轻量级线程功能支持)

线程栈的理解:

每一条执行流就是一条调运连

每一个对应的执行流都要有对应的内存空间(每一个线程main()函数都要有自己的栈)

栈结构是为了支持相对调运连的临时变量的开辟和释放,让自己的调用连不受别人的干扰

线程的局部存储:

__thread + a(变量名) 作用是每一个线程都会有一个私有变量a,

__thread 是编译器提供的, 是编译选项,局部存储只能存储c,c++中内置类型

使用场景:

线程中可能需要调用函数,也可能调用需要另一个函数的返回值,这个情况就需要把另一个函数的返回值存储起来,这就用到了局部存储(__thread)

相关推荐
wdfk_prog9 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
x-cmd10 小时前
Mac 涨价后,本地 AI 还能千元入门吗?
linux·人工智能·macos·ai·agent·amd·本地ai入门
Sirius Wu11 小时前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc
J-Tony1111 小时前
【Redis】 Redis 是单线程还是多线程
服务器·数据库·mysql
许彰午12 小时前
95_Python内存管理与垃圾回收
开发语言·python
多加点辣也没关系12 小时前
JavaScript|第13章:原始类型的方法
开发语言·javascript·ecmascript
এ慕ོ冬℘゜12 小时前
深入理解 JavaScript 事件体系:Window、鼠标与键盘事件详解
开发语言·javascript·okhttp
AOwhisky13 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
chouchuang14 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
云空15 小时前
《Three.js 3D实例大全》
开发语言·javascript·3d·three.js