Mark Sizer wrote:
I know there was a discussion about the need for these and why they're not in the library. I can't find it, however.
I'm having the same problem the original poster had: I'm using the thread ID as an identifier in a data structure (std::map in this case).
You can do that with Windows thread IDs, because they are simple integers. Unfortunately the Posix thread ID type (pthread_t) is an abstract data type and the only relation defined on it is equality (pthread_equal()). Some implementations use a type that can safely and correctly be compared with std::less, but there's no guarantee of that, so Boost can't offer such a guarantee either.
Now that I'm converting to the Boost threads library, I have to change that. I'm not sure what to do instead.
Any help, either a pointer to the original discussion or direct suggestions, will be much appreciated.
How about using pointers to boost::thread objects as IDs (they must of course be the instances used to start the thread, rather than instances created with the default constructor). Store each thread's own pointer in TLS (or TSS as Boost.Threads calls it). (This is tricky, though - you can't pass a thread's own ID to its initial function, as threads start to run immediately. I suppose you could use placement new, but that's a bit gross.) What's the need for thread IDs, anyway? Are you using a thread pool?