Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Jun 2010 16:09:31 -0400 (EDT)
From:      Daniel Eischen <deischen@freebsd.org>
To:        =?UTF-8?B?VsOhY2xhdiBIYWlzbWFu?= <v.haisman@sh.cvut.cz>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: How to get a thread ID?
Message-ID:  <Pine.GSO.4.64.1006031607210.29332@sea.ntplx.net>
In-Reply-To: <4C07FF45.5070703@sh.cvut.cz>
References:  <6e716c850fa84621482b71826dae55d5@shell.sh.cvut.cz> <Pine.GSO.4.64.1006031045330.28157@sea.ntplx.net> <4C07FF45.5070703@sh.cvut.cz>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-1804928587-1275595771=:29332
Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; format=flowed
Content-Transfer-Encoding: QUOTED-PRINTABLE

On Thu, 3 Jun 2010, V=C3=A1clav Haisman wrote:

> Daniel Eischen wrote, On 3.6.2010 16:51:
>> On Thu, 3 Jun 2010, V=C3=A1clav Haisman wrote:
>>
>>>
>>> Hi,
>>> is it possible to obtain some sort of a thread ID that identifies a thr=
ead
>>> 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 thr=
eads
>>> 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 ca=
n
> 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 scr=
een.
>
> * 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 ge=
t
> 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.

--=20
DE
---559023410-1804928587-1275595771=:29332--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.64.1006031607210.29332>