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)

相关推荐
pyengine37 分钟前
基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)
开发语言·python·qt·word
YuSun_WK43 分钟前
配置MambaIRv2: Attentive State Space Restoration的环境
开发语言·python
Nick_zcy44 分钟前
开发基于python的商品推荐系统,前端框架和后端框架的选择比较
开发语言·python·前端框架·flask·fastapi
riveting1 小时前
SD2351核心板:重构AI视觉产业价值链的“超级节点”
大数据·linux·图像处理·人工智能·重构·智能硬件
淬渊阁1 小时前
Go package
java·开发语言
冰茶_1 小时前
C#中常见的设计模式
java·开发语言·microsoft·设计模式·微软·c#·命令模式
易保山1 小时前
MIT6.S081 - Lab10 mmap(文件&内存映射)
linux·操作系统·c
Echo``1 小时前
2:QT联合HALCON编程—图像显示放大缩小
开发语言·c++·图像处理·qt·算法
NoneCoder1 小时前
HTML 模板技术与服务端渲染
服务器·servlet·html
禅与Bug的修复艺术2 小时前
JAVA后端开发常用的LINUX命令总结
java·linux·面试·java面试·后端开发·java后端·面试经验