关于多线程栈空间的若干问题

1.一个进程应该有自己独立的进程空间。

应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G

2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?

栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.

单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.


是否都是在一个线性地址空间内呢?

在同一个进程内,就在同一线性地址空间内.


但也因为线程共用栈空间,产生很多同步问题

同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.

多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
展开阅读全文

没有更多推荐了,返回首页