多线程问题
来源:互联网 发布:河北时光钟网络靠谱吗 编辑:程序博客网 时间:2024/05/16 02:09
1.一个进程应该有自己独立的进程空间。
应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G
2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?
栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.
单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.
是否都是在一个线性地址空间内呢?
在同一个进程内,就在同一线性地址空间内.
但也因为线程共用栈空间,产生很多同步问题
同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.
多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
应当说每个进程各自拥有其独立的地址空间.都是虚地址,在32位机上都是0-4G
2. 而创建了多线程,各个线程要求有自己独立的栈,这些独立的栈是怎么分布的呢?
栈应当是一个动态地概念,只有在线程开始执行后,才为其分配栈资源.具体的分布是无法确定的.我觉得这就像
调用函数一样,当调用函数时,进程通过调整栈基址指针寄存器和栈顶指针寄存器,为函数分配了一个栈空间.
能够确定的是,这片空间肯定是在进程的栈区内划分出来的一片地址空间.
单线程程序只不过是多线程的一种特殊形式,每创建一个线程时,为每一线程在进程内的栈空间上化分出一片区域,作为该线程的栈空间.并且在线程的描述结构里面应当有保存某些寄存器如esp,ebp之类的数据结构的定义.
是否都是在一个线性地址空间内呢?
在同一个进程内,就在同一线性地址空间内.
但也因为线程共用栈空间,产生很多同步问题
同步问题不是由此引入的.
进程内的线程共享进程的栈空间,但在栈空间内,每一线程都有其独立的栈区.
多线程编程时,需要进行同步访问的数据有三种,一种是全局变量,一种是动态分配的变量,还有一种是函数内的局部静态变量,这三种类型的变量都不存在于栈里面.
0 0
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题...
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 多线程问题
- 无法定义1px左右高度的容器的解决…
- 设置滚动条颜色
- FF下文本无法撑开容器的高度
- 文本框输入字符垂直居中的解决方法
- li中内容超过长度后以省略号显示的…
- 多线程问题
- firefox下如何使连续长字段自动换…
- 超链接访问过后hover样式就不出现…
- <marquee>标签设置内容滚动
- HTML中IE浏览器版本的判断
- hi,大家好
- C#中关于图片的几个操作
- C#中的多图片上传操作
- 获取下拉框的值