在多线程进程中,哪些程序状态组件在线程之间共享?

时间:2009-11-10 21:16:18

标签: multithreading operating-system

在多线程进程中,跨线程共享以下哪个程序状态组件?

  • 注册值
  • 堆内存
  • 全球变量
  • 堆叠内存

我的建议;只有全局变量,全局变量在堆上分配?所以堆内存和全局变量。它是否正确?

4 个答案:

答案 0 :(得分:15)

永远堆积内存。

全局变量取决于平台,通常是共享的。

堆栈是特定于线程的,也是寄存器。

答案 1 :(得分:1)

这取决于语言和线程实现。例如,我不认为即使C也允许你直接访问CPU寄存器,所以说pthreads是否共享寄存器(对于记录,我相当肯定它没有)是相当没有意义的。同样在C中,全局变量 not 实际上是在堆上分配的,尽管它们可能是其他语言。

堆栈更复杂。在C / pthreads中,每个线程都有自己的堆栈,但在其他语言和线程模型中,情况可能会复杂得多,因为底层堆栈模型可能不那么简单。

答案 2 :(得分:0)

堆栈:没有

寄存器:否

堆:是的(如果你必须选择y或n,真正的答案取决于它)

全球:是的

答案 3 :(得分:0)

全局值和堆内存在多线程进程中共享。寄存器值和堆栈存储器对每个线程都是专用的。