pid:2394 tid:2399
pid:2394 tid:2398
pid:2394 tid:2397pid: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是一样的吗?我的结果是否正确?
答案 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)返回的不透明值)