关于多线程栈空间的若干问题
来源:互联网 发布:高仿商城javaweb源码 编辑:程序博客网 时间:2024/06/07 23:04
1.一个进程应该有自己独立的进程空间。
应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G
2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?
栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.
单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.
是否都是在一个线性地址空间内呢?
在同一个进程内,就在同一线性地址空间内.
但也因为线程共用栈空间,产生很多同步问题
同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.
多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G
2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?
栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.
单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.
是否都是在一个线性地址空间内呢?
在同一个进程内,就在同一线性地址空间内.
但也因为线程共用栈空间,产生很多同步问题
同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.
多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
- 关于多线程栈空间的若干问题
- 关于多线程栈空间的若干问题
- 关于无缝空间数据库若干问题的探讨
- 关于Winpcap的若干问题
- 关于DLL的若干问题
- 关于DES的若干问题:
- 关于fusionchart的若干问题
- 关于aotutrace 的若干问题
- 关于ARM的若干问题
- 关于CSpreadSheet的若干问题
- 关于指针的若干问题
- 关于fopen的若干问题
- 关于webview的若干问题
- 关于ListView的若干问题
- 关于ABST2的若干问题
- 关于CSpreadSheet的若干问题
- 关于Slidingmenu的若干问题
- 关于递归的若干问题
- PowerBuilder中实现数据窗口打印预览通用方法
- 编译原理——赋值语句和简单表达式(二)
- Java多态小结
- PB开发Sybase数据库应用技巧点滴
- SRM538-div1-3-SkewedPerspective
- 关于多线程栈空间的若干问题
- 编译原理——赋值语句和简单表达式(三)
- Java格式化日期
- PB数据窗口中按钮的封装
- 道生一(一)
- SSH面试题总结
- android 短信接收流程分析——为更好的拦截短信做准备
- PB中协调多数据窗口数据操纵的一种解决方法
- C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)