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

2つのスレッドが同じスタックを使用することはできません。彼らはお互いにそれを台無しにして、すぐにクラッシュするでしょう。

を使用する場合fork、メモリ共有はありません。両方のスレッドのスタックポインタの値は同じですが、物理的に異なるメモリページを指しています。

を使用する場合pthread_create、親とは別に、新しいスレッドに対して新しいスタックポインタが選択されます。このようにして、それらは互いのスタックを破壊しません。

cloneは低レベルの関数であり、2つの間のどこかにあります。メモリを共有し続けるため、スレッドはスタックを共有してはなりません。ただし、とは異なりpthread_create、新しいスタックポインタはユーザーが決定し、ユーザーは必要に応じて選択できます。引用する文は、慎重に選択する必要があることを警告しています。

于 2012-05-15T08:52:49.823 に答える