线程基础
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