それらは同じではありません。TLPIから収集したビットをいくつか示します(これを完全に説明するのに十分な大きさのブロックを見つけることができませんでした)。急いでいる場合は、おそらく最後の部分だけが必要です。
gettid
gettid()
Linux 2.4 では、スレッドが独自のスレッド ID を取得できるようにする新しいシステム コール が導入されました。
スレッド グループ内の各スレッドは、一意のスレッド識別子によって区別されます。スレッド ID は、プロセス ID に使用されるのと同じデータ型を使用して表されますpid_t
。スレッド ID はシステム全体で一意であり、カーネルは、スレッドがプロセスのスレッド グループ リーダーである場合を除き、システム上のプロセス ID と同じスレッド ID がないことを保証します。
pthread_self
プロセス内の各スレッドは、スレッド ID によって一意に識別されます。スレッドは、 を使用して独自の ID を取得できますpthread_self()
。
データ型は不透明なデータとして扱われる必要があるため、pthread_equal()
関数はスレッド ID を比較するために必要です。pthread_t
Linux スレッドの実装では、スレッド ID はプロセス間で一意です。ただし、これは他の実装では必ずしも当てはまらないため、SUSv3 では、アプリケーションが別のプロセスのスレッドを識別するためにスレッド ID を移植可能に使用できないことを明確に示しています。
gettid
対pthread_self
gettid()
POSIX スレッド ID は、Linux 固有のシステム コールによって返されるスレッド ID と同じではありません。POSIX スレッド ID は、スレッド実装によって割り当てられ、維持されます。によって返されるスレッド ID はgettid()
、カーネルによって割り当てられる番号 (プロセス ID に似ています) です。
私は一緒に行きpthread_setaffinity_np
ますが、マニュアルには次のように書かれていることに注意してください:
これらの関数は、sched_setaffinity(2) の上に実装されています。