我已经考虑了解Linux系统和getpid的结果

时间:2012-10-10 04:51:23

标签: linux posix

pid:2394 tid:2399

pid:2394 tid:2398

pid:2394 tid: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。 我想知道为什么tid结果在getpid()和pthread_self()之间有所不同?

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

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

1 个答案:

答案 0 :(得分:3)

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

这是默认行为。请参阅pthread_self()的linux手册页。这三个条款将澄清它。

  

线程标识符应被视为不透明:任何使用a的尝试   除了pthreads调用之外的线程ID是不可移植的,并且可能导致未指定的结果。

     

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

     

pthread_self()返回的线程ID与          通过调用gettid(2)返回的内核线程ID。

这也来自gettid手册页

  

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