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 分钟前
基于Java+SpringBoot+SSM攻防靶场实验室平台
java·开发语言·spring boot
lly2024063 分钟前
SQL AND & OR 操作符详解
开发语言
伐尘3 分钟前
【图形学】CS:GO 的 “Uber 着色器” 是啥?
开发语言·golang·着色器
鸠摩智首席音效师4 分钟前
什么是 Unix / Linux 中的僵尸进程 ?
linux·服务器·unix
AI流程架构师(预备)5 分钟前
用 Docker 部署语音识别服务(funasr)
运维·docker·容器
掘根7 分钟前
【微服务即时通讯】入口网关子服务
运维·微服务·架构
三万棵雪松8 分钟前
【Linux 物联网网关主控系统-感知层部分(三)】
linux·物联网·嵌入式linux
Elnaij8 分钟前
从C++开始的编程生活(25)——C++11标准Ⅱ
开发语言·c++
曦月合一9 分钟前
访问服务器json接口,将json字符串解析成json格式的demo
运维·服务器·json
开开心心_Every9 分钟前
轻松加密文件生成exe,无需原程序解密
运维·服务器·网络·电脑·excel·consul·memcache