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)

相关推荐
雪度娃娃1 分钟前
转向现代C++——保证const成员函数的线程安全性
开发语言·c++
网络研究院3 分钟前
Proton Drive采用OpenPGP加密,上传速度提升300%
服务器·网络·安全·proton drive·openpgp
Ltd Pikashu6 分钟前
insmod 加载内核模块 —— sys_init_module 源码剖析
linux·kernel·insmod
原来是猿21 分钟前
深入理解 C++ unordered_map 与 unordered_set
开发语言·c++
大貔貅喝啤酒21 分钟前
pip 国内镜像源大全【测试 / 自动化开发常备】
运维·自动化·pip·国内镜像源
满天星830357722 分钟前
【Qt】信号和槽 (一)(概述和基本使用)
开发语言·c++·qt
遇见小修修24 分钟前
选择诚信上门修电脑服务,应参考哪些判断标准?
服务器·电脑·负载均衡
hj28625124 分钟前
Linux网络基础一
linux·运维
l1t31 分钟前
DeepSeek总结的 waddler,一个 Go 语言编写的从 YAML 文件运行的 ETL 管道
开发语言·golang·etl
世人万千丶36 分钟前
鸿蒙PC异常解决:Install Failed: error: failed to install bundle.
服务器·华为·开源·harmonyos·鸿蒙