当前位置: 技术问答>linux和unix
线程到底共享了什么
来源: 互联网 发布时间:2016-12-09
本文导语: “多个线程之间共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文” 这句话的意思是不是说 线程只共享数据,而不共享上下文。。 再问一下 上下文都包括什么呢? | ...
“多个线程之间共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文”
这句话的意思是不是说 线程只共享数据,而不共享上下文。。
再问一下 上下文都包括什么呢?
这句话的意思是不是说 线程只共享数据,而不共享上下文。。
再问一下 上下文都包括什么呢?
|
main函数和信号处理函数是同一个进程地址空间中的多个控制流程,多线程也是如此,但是比信号处理函数更加灵活,信号处理函数的控制流程只是在信号递达时产生,在处理完信号之后就结束,而多线程的控制流程可以长期并存,操作系统会在各线程之间调度和切换,就像在多个进程之间调度和切换一样。由于同一进程的多个线程共享同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:
•文件描述符表
•每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)
•当前工作目录
•用户id和组id
但有些资源是每个线程各有一份的:
•线程id
•上下文,包括各种寄存器的值、程序计数器和栈指针
•栈空间
•errno变量
•信号屏蔽字
•调度优先级
•文件描述符表
•每种信号的处理方式(SIG_IGN、SIG_DFL或者自定义的信号处理函数)
•当前工作目录
•用户id和组id
但有些资源是每个线程各有一份的:
•线程id
•上下文,包括各种寄存器的值、程序计数器和栈指针
•栈空间
•errno变量
•信号屏蔽字
•调度优先级
|
上下文包括程序计数器 各个寄存器的值 堆栈等等
在中断发生时,内核需要为当前执行的程序保存这些东西
在中断发生时,内核需要为当前执行的程序保存这些东西
|
对,线程只共享数据,而不共享上下文。各个线程执行各自的代码,井水不犯河水
|
线程上下文,就是线程当前的运行环境,主要指的是CPU中各个寄存器状态,当然还包括堆栈等。