2012-10-10 26 views
0

PID的結果:2394 TID:2399我已經questined約GET TID在Linux系統和GETPID

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。 我想知道爲什麼getpid()和pthread_self()之間的結果不同?

哪一個是對的?我的教授。說pthread使用posix而不是linux系統。

和多線程條件pid是一樣的嗎?我得到了正確的結果嗎?

回答

3

gettid返回線程IDpthread_self返回POSIX線程ID。兩者不同。

這是默認行爲。請參閱pthread_self()的linux手冊頁。這三個條款將澄清它。

線程標識符應被視爲不透明:在並行線程調用使用其他一個 線程ID比任何企圖是不可移植的,並可能導致不確定的結果。

線程ID只能保證在進程中是唯一的。一個線程 ID可能會在已終止的線程加入後重新使用,或者分離的線程已終止。

pthread_self()返回的線程標識與調用gettid(2)返回的 內核線程標識不同。

而且這從gettid手冊頁

此調用返回線程ID是不一樣的事,作爲一個POSIX 線程ID(即通過pthread_self返回的不透明值(3))