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)

相关推荐
RisunJan几秒前
Linux命令-traceroute(IP 路由路径追踪)
linux·运维·tcp/ip
芷栀夏6 分钟前
极空间部署Sokoban:Docker搭建网页版推箱子并实现远程访问
运维·docker·容器
Hhy_11078 分钟前
《C++深度解构02》类和对象(上)——定义规范、内存对齐与 this 指针全解
c语言·开发语言·c++·学习·visual studio
深圳恒讯22 分钟前
乌克兰服务器的网络延迟、机房现状与稳定性情况
运维·服务器·网络
星夜夏空9925 分钟前
网络编程(5)—— Reactor实现(v1)
服务器·javascript·网络
电子云与长程纠缠27 分钟前
UE5 Lyra PocketWorld进行3D内容UI预览 - 下
开发语言·学习·游戏·ui·ue5
Dream-Y.ocean31 分钟前
具身智能落地实战:数字人驱动的全自动化舆情监控系统
运维·自动化
拾光Ծ35 分钟前
Linux五种I/O模型与fcntl非阻塞控制
java·linux·服务器·i/o模型
半旧51839 分钟前
【Java Web02】WEB服务器内部实现技术揭秘
java·服务器·前端
平常心的技术小牛44 分钟前
Qt-快速上手-QLabel
开发语言·qt