0

pid : 2394 tid : 2399

pid : 2394 tid : 2398

pid : 2394 tid : 2397

pid : 2394 tid : 2395

*这是使用 getpid() __NR_gettid*

PID:2529 时间:1811777280

pid:2529 tid:1820169984

PID:2529 时间:1828562688

PID:2529 时间:1836955392

pid:2529 tid:1845348096

*这是使用 pthread_self()*

我正在使用 Fedora17。我想知道为什么 getpid() 和 pthread_self() 的 tid 结果不同?

哪一个是对的?我的教授 说pthread使用posix而不是linux系统。

并且在多线程条件下pid是一样的吗?我得到正确的结果吗?

4

1 回答 1

3

gettid返回线程 IDpthread_self返回POSIX 线程 ID。两者不同。

这是默认行为。请参阅 linux 手册页pthread_self()。这 3 个条款将阐明这一点。

线程标识符应该被认为是不透明的:任何在 pthreads 调用中使用线程 ID 的尝试都是不可移植的,并且可能导致未指定的结果。

线程 ID 只保证在一个进程中是唯一的。在已终止的线程已加入或已分离的线程已终止后,可以重用线程 ID。

pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

这也来自gettid手册页

此调用返回的线程 ID 与 POSIX 线程 ID 不同(即 pthread_self(3) 返回的不透明值)

于 2012-10-10T04:59:25.850 回答