The new C++ has this std::thread type. Works like a charm. Now I would like to give each thread a name for more easy debugging (like java allows you to). With pthreads I would do:
pthread_setname_np(pthread_self(), "thread_name");
but how can I do this with c++0x? I know it uses pthreads underneath on Linux systems, but I would like to make my application portable. Is it possible at all?
With pthreads I would do: pthread_setname_np(pthread_self(), "thread_name");
The pthread_setname_np() function can be used to set a unique name for a thread, which can be useful for debugging multithreaded applications. The thread name is a meaningful C language string, whose length is restricted to 16 characters, including the terminating null byte ('\0').
std::thread::operator= thread objects cannot be copied (2).
There are two ways to set a thread name. The first is via the SetThreadDescription function. The second is by throwing a particular exception while the Visual Studio debugger is attached to the process.
A portable way to do this is to maintain a map of names, keyed by the thread's ID, obtained from thread::get_id()
. Alternatively, as suggested in the comments, you could use a thread_local
variable, if you only need to access the name from within the thread.
If you didn't need portability, then you could get the underlying pthread_t
from thread::native_handle()
and do whatever platform-specific shenanigans you like with that. Be aware that the _np
on the thread naming functions means "not posix", so they aren't guaranteed to be available on all pthreads implementations.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With