0

在克隆 (2) 手册页中,对于子堆栈,它提到了

Since the child and calling process may share memory, it is not possible for the child 
process to execute in the same stack as the calling process.

任何人都可以解释一下“共享内存”是如何使它变得不可能的。OTOH,一个普遍的看法是线程中的函数执行顺序会与其他线程不同,因此我们需要另一个堆栈。

谢谢,卡皮尔

4

1 回答 1

2

两个线程不能使用同一个堆栈。他们只会把事情搞砸,很快就会崩溃。

使用时fork,没有内存共享。两个线程具有相同的堆栈指针值,但它指向物理上不同的内存页。

使用时pthread_create,为新线程选择一个新的堆栈指​​针,与父线程分开。这样他们就不会破坏彼此的堆栈。

clone是一个低级函数,介于两者之间。它保持内存共享,因此线程不能共享堆栈。但与 不同pthread_create的是,新的堆栈指​​针是由用户决定的,用户可以随意选择。你引用的那句话警告你应该谨慎选择它。

于 2012-05-15T08:52:49.823 回答