0

pid: 2394 tid: 2399

pid: 2394 tid: 2398

ピッド: 2394 ティド: 2397

pid: 2394 tid: 2395

*これは getpid() を使用しています __NR_gettid*

pid :2529 tid : 1811777280

pid :2529 tid : 1820169984

pid :2529 tid : 1828562688

pid :2529 tid : 1836955392

pid :2529 tid : 1845348096

*これは pthread_self() を使用しています*

Fedora17を使用しています。getpid() と pthread_self() で tid の結果が異なるのはなぜですか?

どちらが正しいですか?私の教授。上記のpthreadは、Linuxシステムではなくposixを使用しています。

マルチスレッド状態ではpidは同じですか?私は正しい結果を得ていますか?

4

1 に答える 1

3

gettidスレッド IDを返し、 POSIX スレッドpthread_selfID を返します。どちらも異なります。

これがデフォルトの動作です。の Linux のマニュアル ページを参照してくださいpthread_self()。これらの3つの句はそれを明確にします。

スレッド ID は不透明であると見なす必要があります。pthreads 呼び出し以外でスレッド ID を使用しようとすると、移植性がなくなり、不特定の結果が生じる可能性があります。

スレッド ID は、プロセス内で一意であることが保証されるだけです。スレッド ID は、終了したスレッドが結合された後、または切り離されたスレッドが終了した後に再利用できます。

pthread_self() によって返されるスレッド ID は、 gettid(2) の呼び出しによって返されるカーネル スレッド ID と同じではありません

これもgettidマニュアルページから

この呼び出しによって返されるスレッド ID は、POSIX スレッド ID (つまり、pthread_self(3) によって返される不透明な値) と同じではありません。

于 2012-10-10T04:59:25.850 に答える