有关线程和进程堆栈的一个简单问题
问题描述:
线程有一个堆栈和一个进程有堆栈的策略是什么。有关线程和进程堆栈的一个简单问题
如果我们有10个过程,我们有多少个堆栈,10个?
如果我们在一个进程下有10个线程,我们有多少个栈?所有线程共享相同的堆栈?
谢谢!
答
如果您考虑堆栈是什么,共享堆栈没有意义。
请记住,这是一个调用堆栈而不是数据结构。由于指令指针(指示要执行的指令)在程序中移动,它会遇到函数调用,在跳转到被调用函数之前将当前上下文(本地变量,IP前的IP)放入堆栈。该函数使用堆栈的顶部作为其局部变量等,当堆栈完成时,弹出堆栈,将原始函数的局部变量留在顶部,并将IP恢复到函数调用之后。
如果两个线程具有相同的堆栈,它们将共享上下文,但它们可能具有不同的IP。如果其中一个线程调用了函数,那么对于另一个线程(仍然在原始函数中),堆栈将不再有意义。如果IP是同步的,你没有两个不同的线程 - 你只是做了两次。
正如其他人所说:每个线程一个堆栈,每个进程。
答
每个进程都有自己的堆栈。因此N(单线程)进程具有N个堆栈。
每个线程都有自己的堆栈。因此具有N个线程的进程具有N个堆栈。
答
每个线程一个堆栈。 5个进程有2个线程,每个等于10个堆栈。
@nobugz,这是一个不必要的-1。他在回答中特别指出,*单线程*进程每个都有一个堆栈。 – 2010-02-17 20:30:25