2010-02-17 102 views
1

线程有一个堆栈和一个进程有堆栈的策略是什么。有关线程和进程堆栈的一个简单问题

如果我们有10个过程,我们有多少个堆栈,10个?

如果我们在一个进程下有10个线程,我们有多少个栈?所有线程共享相同的堆栈?

谢谢!

回答

4

如果您考虑堆栈是什么,共享堆栈没有意义。

请记住,这是一个调用堆栈而不是数据结构。由于指令指针(指示要执行的指令)在程序中移动,它会遇到函数调用,在跳转到被调用函数之前将当前上下文(本地变量,IP前的IP)放入堆栈。该函数使用堆栈的顶部作为其局部变量等,当堆栈完成时,弹出堆栈,将原始函数的局部变量留在顶部,并将IP恢复到函数调用之后。

如果两个线程具有相同的堆栈,它们将共享上下文,但它们可能具有不同的IP。如果其中一个线程调用了函数,那么对于另一个线程(仍然在原始函数中),堆栈将不再有意义。如果IP是同步的,你没有两个不同的线程 - 你只是做了两次。

正如其他人所说:每个线程一个堆栈,每个进程。

0

每个进程都有自己的堆栈。因此N(单线程)进程具有N个堆栈。

每个线程都有自己的堆栈。因此具有N个线程的进程具有N个堆栈。

+1

@nobugz,这是一个不必要的-1。他在回答中特别指出,*单线程*进程每个都有一个堆栈。 – 2010-02-17 20:30:25

2

每个线程一个堆栈。 5个进程有2个线程,每个等于10个堆栈。

2

线程 - >执行上下文 - >需要自己的资源 - >自己的堆栈。

+0

所以没有他们共享一个堆栈的情况? – skydoor 2010-02-17 19:42:57

+0

不在我碰巧知道的系统中 - 或者,为什么会产生额外的开销来尝试描绘线程之间的调用栈?对我来说似乎是不必要的开销。 – jldupont 2010-02-17 19:45:01