概念理解
linux下没有线程的概念,只有轻量级进程的概念,
有接口:clone()
是clone()调用,在库中创建栈
源码解析
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)