线程基础

线程基础

lwp:light weight process

多进程:编程方便,简化逻辑。

多线程:简化逻辑;减少开销(创建,切换和调度);通信方便。

同一进程的多个线程共享同一地址空间,包括代码段,数据段。

通过man pthreads了解POSIX threads的介绍,与进程间资源共享情况。

  • 多线程共享的资源

同一地址空间(包括代码段,数据段,自然包括全局变量)。

进程id和父进程id,进程组id和session ID

用户id和组id

文件描述符表

每种信号处理方式(SIG_IGN, SIG_DFL或自定义信号处理函数)

当前工作目录

  • 不共享

线程id(递减)

上下文,包括各种寄存器的值,程序计数器和栈指针。

栈空间

errno变量

信号屏蔽字

调度优先级

注:线程安全函数不一定为可重入函数(线程安全函数可只读全局变量而不写,可重入函数不可访问全局变量)。

  • linux线程实现

linux实现Posix线程有两种方式:LinuxThreads(旧的,glibc2.4起就不再支持了)和NPTL(Native POSIX Threads Library, glibc 2.3.2, kernel 2.6).

NPTL创建线程的同时,创建manager线程,负责回收分离状态线程。

安装manpages-posix-dev可man thread相关函数,ubuntu下安装方法:

sudo apt-get install manpages-posix-dev

原文地址:https://www.cnblogs.com/embedded-linux/p/5071548.html