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)

相关推荐
墨风如雪2 小时前
甲骨文云(Oracle Cloud)最新注册防坑记录:被ABC了怎么办?
服务器
JAVA面经实录9172 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
xingfujie3 小时前
运维实战攻略
运维
HHFQ3 小时前
在 systemd 场景下的 CPU 限制方式
linux
道清茗3 小时前
【RH294知识点汇总】第 9 章 《 自动执行 Linux 管理任务 》常见问题
linux·运维·服务器
山羊硬件Time3 小时前
自动化管理Linux的好工具:shell script
linux·嵌入式硬件·硬件工程师·基带工程·硬件开发
周杰伦fans3 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
北方的流星4 小时前
华三路由器NAT配置
运维·网络·华三
wj3055853784 小时前
Codex + Git 开发环境配置指南(WSL版)
linux·运维·git
星马梦缘4 小时前
如何切换window-ubuntu双系统【方案二】
linux·运维·ubuntu