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)

相关推荐
羑悻的小杀马特3 分钟前
掌握 LangChain 的 Runnable:统一接口、链式组合与流式输出全解析
服务器·langchain·runnable
HLC++3 分钟前
C++中的类和对象
开发语言·c++
橙子也要努力变强3 分钟前
Linux I/O 缓冲区、inode、软硬链接与磁盘结构全解析
linux·c++·操作系统
子有内涵3 分钟前
【Linux】程序地址空间(是什么?为什么?)
linux·运维·算法
setmoon2145 分钟前
C++与量子计算模拟
开发语言·c++·算法
异步的告白7 分钟前
嵌入式Linux学习-默认规则
linux
KIKIiiiiiiii8 分钟前
微信自动化机器人开发
java·开发语言·人工智能·python·微信·自动化
victory043110 分钟前
containerd打包命令 和NFS挂载
java·开发语言
野犬寒鸦11 分钟前
从零起步学习计算机操作系统:进程篇(知识扩展提升)
java·服务器·开发语言·后端·面试
※※冰馨※※12 分钟前
【QT】System error #1455: 页面文件太小,无法完成操作
开发语言·windows·qt