Boost logo

Boost Users :

From: Ben Hutchings (ben.hutchings_at_[hidden])
Date: 2003-05-13 05:44:05


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?


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net