关于多线程栈空间的若干问题
2012-03-30 22:36
232 查看
1.一个进程应该有自己独立的进程空间。
应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G
2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?
栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.
单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.
是否都是在一个线性地址空间内呢?
在同一个进程内,就在同一线性地址空间内.
但也因为线程共用栈空间,产生很多同步问题
同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.
多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G
2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?
栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.
单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.
是否都是在一个线性地址空间内呢?
在同一个进程内,就在同一线性地址空间内.
但也因为线程共用栈空间,产生很多同步问题
同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.
多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
相关文章推荐
- 关于多线程栈空间的若干问题
- 关于无缝空间数据库若干问题的探讨
- 关于结构体中变量空间占用问题思考
- 关于wince 使用占用空间大的内存变量问题(编译无错误但是无法运行的问题)
- 关于Strlen()de若干问题
- SIFT算法中关于高斯金字塔和尺度空间的问题理解
- 关于opencv在QT下的若干问题总结
- [iOS]关于视频方向的若干问题
- 关于Oracle存储过程的若干问题备忘
- 关于解决Android Studio配置文件和模拟器在C盘空间不足的问题
- 关于css中float出现元素高度为0的问题的若干意见
- 关于自定义view使用,命名空间问题,记录而已
- 关于SYSAUX表空间持续增长问题的排查
- 关于解决安装ubuntu双系统中出现的不能识别磁盘分区、空闲空间变不可用问题
- 关于性能优化若干问题报告
- 关于sql server数据库主文件大小与空间问题(因为 'PRIMARY' 文件组已满)
- JAVA中关于String的若干问题
- 关于configure中build,target,host中的若干问题
- 关于oracle存储过程的若干问题备忘
- 关于oracle 内、外连接的若干问题