克隆系统调用中的子堆栈解释

时间:2012-05-15 08:44:00

标签: linux-kernel clone system-calls

在clone(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,一个普遍的看法是线程中的函数执行序列将与其他序列不同,因此我们需要另一个堆栈。

谢谢, 卡皮尔

1 个答案:

答案 0 :(得分:2)

两个线程不能使用相同的堆栈。他们只是为彼此搞砸了,很快就崩溃了。

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

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

clone是一个低级函数,介于两者之间。它保持内存共享,因此线程不能共享堆栈。但与pthread_create不同,新的堆栈指​​针由用户确定,用户可以根据需要选择它。你引用的句子警告你应该小心选择它。