一个关于线程和进程堆栈的快速问题

时间:2010-02-17 19:39:07

标签: multithreading

线程有什么策略可以让堆栈和进程拥有堆栈。

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

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

谢谢!

4 个答案:

答案 0 :(得分:5)

如果你考虑堆栈是什么,分享堆栈是没有意义的。

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

线程 - >执行的背景 - >需要自己的资源 - >它自己的堆栈。

答案 3 :(得分:0)

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

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