[multithreading] スレッドが同じPIDを共有する場合、どのようにそれらを識別できますか?


Answers

スレッドは、PIDとTGID(スレッドグループID)を使用して識別されます。 彼らはまたどのスレッドが誰の親であるかも知っているので、本質的にプロセスは起動するスレッドとPIDを共有します。 スレッドIDは通常、スレッドライブラリ自体(pthread、etc ...など)によって管理されます。 4つのスレッドが開始されている場合は、同じPIDを持つ必要があります。 カーネル自体はスレッドのスケジューリングなどを処理しますが、ライブラリはスレッドの管理に使用されるものです(スレッド結合および待機メソッドの使用に応じて実行できるかどうかは関係ありません)。

注:これは私のカーネル2.6.36の思い出しです。 現在のカーネルバージョンでの私の作業はI / Oレイヤーにあるので、それがその後変更されたかどうかは分かりません。

Question

私は、Linuxでのスレッドの実装に関連するクエリを持っています。

Linuxには明示的なスレッドサポートはありません。 ユーザー空間では、スレッドを作成するためにスレッドライブラリ(NPTLなど)を使用することがあります。 NPTLを使用すると、1:1マッピングがサポートされます。

カーネルはclone()関数を使用してスレッドを実装します。

私が4つのスレッドを作成したとします。 それはそれを意味する:

  • 4つのtask_structがあります。
  • task_struct中には、クローンの引数(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)リソースを共有する手段があります。

今私は次のクエリを持っています:

  1. 4つのスレッドは同じPIDを持っていますか? 誰かが精緻化することができれば、どのようにPIDを共有するか。
  2. 異なるスレッドはどのように識別されますか? いくつかのTID(スレッドID)の概念はありますか?



Links