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)

相关推荐
SomeOtherTime7 小时前
Rust所有权(AI回答)
开发语言·后端·rust
lzx_0027 小时前
Linux 进程(三) 从进程状态到僵尸进程、孤儿进程
linux·服务器
Easyhood7 小时前
Android 开发入门实践(十四):Compose 副作用入门与四个常用 API
android·开发语言·kotlin·android jetpack·compose
白杨尚青8 小时前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
FlightYe8 小时前
音视频修炼之容器与协议(四):RTSP详解
android·linux·ffmpeg·音视频·dash
刘马想放假9 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
kloc10 小时前
聊天室项目入口网关子服务的实现
linux·c++
GeW11 小时前
深圳APEC峰会倒计时:数据库与Linux运维的"隐形考场"
linux
饮水桶_T11 小时前
JAVA IO流笔记
开发语言·数据结构·算法
梦到啥说啥12 小时前
Linux网络编程:UDP网络协议
linux·网络协议·udp