1

メイン スレッドが新しいスレッドを作成し、新しいスレッドが子プロセスを作成するプログラムを作成します。新しいスレッドとフォークされたプロセスを追跡するのに苦労しているので、誰かから賢明な答えを得たい.

私の質問は

  • 1. スレッドで作成されたプロセスは、 の後にコードの実行を開始しますpthread_createか?
  • 2. 1 でない場合、スレッドで fork の呼び出しが発生した場合、fork されたプロセスはどこから開始されますか?

    私の質問を読んでくれてありがとう。

  • 4

    1 に答える 1

    0

    異なるシステムには異なる POSIX スレッド実装があり、これにより内部が公開される可能性があるため、これの一部は OS に少し依存しています。

    POSIX はpthread_atfork、いくつかの問題に対処するためのやや鈍い手段として提供されていますが、それでも私にはかなり面倒に見えます。

    システムが「ユーザー ランド スレッド」と「カーネル スレッド」の間で 1 対 1 のマップを使用する場合、cloneまたはrforkスレッド間のデータの適切なユーザー空間共有を実現するために、それforkを呼び出す (単一の) スレッドを複製するだけです。ただし、システムに多対多のスタイル マッピングがある場合 (つまり、1 つのユーザー プロセスが複数のスレッドを処理し、少なくともシステム コールのブロックに入る前に)、fork複数のスレッドが内部的に複製される可能性があります。POSIX では、1 つのスレッドのみを複製したように見えるはずなので、それは表示されないはずですが、すべてのシステムがこれをどの程度うまく実装しているかはわかりません。

    http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-themには、一般的なアドバイスがいくつかあります(Linux 中心で、明らかに、それでも有用です)。

    forkスレッド内に入れたいが、入れたくない特別な理由はありますexecか? 一般に、より多くのコードを並行して実行したい場合は、さらに別のスレッドをスピンオフします (つまり、スレッドを実行することを選択したら、必要な場合を除いてすべてをスレッドで行いますforkexec失敗したexec場合は、単に_exit)。

    于 2013-05-27T17:56:23.023 に答える