关闭

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

标签: 多线程数据结构编程
6222人阅读 评论(0) 收藏 举报
1.一个进程应该有自己独立的进程空间。

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

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

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

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


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

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


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

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

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1340238次
    • 积分:9272
    • 等级:
    • 排名:第1972名
    • 原创:80篇
    • 转载:30篇
    • 译文:4篇
    • 评论:202条
    博客专栏
    最新评论