GNU/Linux >> Linux の 問題 >  >> Linux

スレッド ID とスレッド ハンドル

ID は、システムで実行されているスレッドの一意の数値識別子です。スレッド ハンドルは、他のカーネル オブジェクト ハンドルと同様に、カーネル オブジェクトへの特殊なタイプの参照カウント ポインターと見なすことができます。

したがって、カーネル空間には、ID =12345 のタイプ THREAD のオブジェクトがあります

そして、スレッドで何かをしたいので、値 44 のスレッド ID と呼ばれるアドレス空間にポインターがあります。

同じカーネル オブジェクトへの異なるハンドルは異なる値 (1 つのオブジェクトへの 2 つのポインター) を持ち、カーネル オブジェクトは複数のプロセスでハンドルを持つことができることに注意してください。


私の知る限り、Linux の pthread ライブラリにはスレッド ハンドルの概念がありません。 pthread_create およびその他の pthreads 関数は、スレッド ID を返します。

Windows では、ファイル ハンドルがファイル名と異なるのと同じように、スレッド ハンドルはスレッド ID とは異なります。

スレッド ハンドルは、スレッドで何かを実行できるようにするトークンです (通常はスレッドを待機するか、スレッドを強制終了します)。 Win32 は多くのオブジェクトに対してこれらのトークンを持っており、それらを一般的に HANDLE と呼んでいます。

トークンは基本的に、実行中 (または停止中) のスレッドへのポインターであり、一連の機能が関連付けられています。同様に、読み取り専用のファイル ハンドルを持つこともできます。

このレベルの間接化は役立つ場合もあれば、そうでない場合もありますが、Win32 が行う方法であり、他のタイプのオブジェクトを処理する方法とほぼ一致しています。


スレッド ID はプログレッシブ (つまり、1 つずつ) であり、トラバースできます。スレッド ハンドルは、Windows のほとんどのハンドルと同様に、実際にはポインターです。たとえば、スレッド ハンドルを使用してスレッド プロパティ ビットを設定できますが、スレッド ID は設定しません。 .


Linux
  1. errno はスレッドセーフですか?

  2. LinuxでWaitForSingleObjectとWaitForMultipleObjectsは同等ですか?

  3. 切り離された POSIX スレッドと結合可能な POSIX スレッド

  1. 別のスレッドからスレッドローカルにアクセスする

  2. 新しいコンソール ウィンドウで Python スレッドを開く

  3. どのスレッドがシグナルを処理しますか?

  1. WebSockを処理するためのApacheの構成

  2. シェルスクリプトでスイッチを処理する方法は?

  3. Linux ルーティングのバグ?