How to get a thread ID?

Daniel Eischen deischen at freebsd.org
Thu Jun 3 20:09:33 UTC 2010


On Thu, 3 Jun 2010, Václav Haisman wrote:

> Daniel Eischen wrote, On 3.6.2010 16:51:
>> On Thu, 3 Jun 2010, Václav Haisman wrote:
>>
>>>
>>> Hi,
>>> is it possible to obtain some sort of a thread ID that identifies a thread
>>> within a process other than pthread_self()? Something like gettid() on
>>> Linux? Apparently, on FreeBSD the pthread_t is a pointer type and does not
>>> identify the thread well enough. GDB on FreeBSD seems to know about threads
>>> and does not seem to use the same ID as is pthread_t.
>>
>> "identifies a thread" well enough for what?  pthread_t is suppose
>> to be opaque.  Whether it is an int, pointer, or whatever, it is
>> implementation-defined and not suppose provide any more information
>> than available through the standard pthread interfaces.  There are
>> some non-portable interfaces in <pthread_np.h> though.
> Exactly, pthread_t is opaque and it thus it is only by a chance that I can
> print its value, it is a pointer on FreeBSD. It could as well be a struct and
> then I could not possibly do anything to print the thread identity on screen.
>
> * 4 Thread 28426ec0 (LWP 100172)  0x0804b9f6 in TestThread::run ()
>
> As shown above, GDB can show some sort of ID, the LWP bit. How does it get
> it? Is it possible to get the LWP ID from inside the process without
> debugging it?

I think the value that it is showing (28426ec0) is the hex
value of the pthread_t (pointer).  You can also use
pthread_[gs]etname_np() from <pthread_np.h> if you want
to associate an string identifier with a thread.

-- 
DE


More information about the freebsd-hackers mailing list