【发布时间】:2010-12-15 05:42:42
【问题描述】:
以下哪些程序状态组件在多线程进程中跨线程共享?
- 注册值
- 堆内存
- 全局变量
- 堆栈内存
我的建议;只有全局变量,全局变量是分配在堆上的吗?所以堆内存和全局变量。它是否正确?
【问题讨论】:
-
全局变量在程序的静态数据段中,而不是在堆中(如果我们谈论的是像 C 这样的经典编译语言)
标签: multithreading operating-system
以下哪些程序状态组件在多线程进程中跨线程共享?
我的建议;只有全局变量,全局变量是分配在堆上的吗?所以堆内存和全局变量。它是否正确?
【问题讨论】:
标签: multithreading operating-system
全局值和堆内存在多线程进程之间共享。寄存器值和堆栈内存是每个线程私有的。
【讨论】:
堆栈:没有
注册:没有
堆:是的(如果你必须选择 y 或 n,真正的答案取决于)
全局变量:是的
【讨论】:
这取决于语言和线程实现。例如,我认为即使是 C 语言也不允许您直接访问 CPU 寄存器,因此 pthreads 是否共享寄存器(作为记录,我相当肯定它不会)是相当有争议的。同样在 C 中,全局变量不实际上分配在堆上,尽管它们可能在其他语言中。
堆栈更复杂。在 C/pthreads 中,每个线程都有自己的堆栈,但在其他语言和线程模型中,情况可能要复杂得多,因为底层堆栈模型可能并不那么简单。
【讨论】:
总是堆内存。
全局变量取决于平台,通常是共享的。
堆栈和寄存器一样是线程特定的。
【讨论】: