This is the mail archive of the
mailing list for the pthreas-win32 project.
Re: Using pthread_t as a key in a map
What I'm trying to do is to order the pthread_t pointers so I can
simulate the windows function "WaitForMultipleObjects"; I have to
order the pthread_t in a consistent way before attempting to lock
several mutexes at once.
The way the pthread_t is defined in the library doesn't allow to use
the < and > operators; those operators can be used when pthread_t is
defined as a pointer (like in the pthreads implementation on posix
systems) and not as a structure containing a pointer (as in
I defined the operator for ptw32_handle_t, but it works for pthread_t
(since it is a synonim for ptw32_handle_t).
Anyway your considerations are right since this breaks the compilation
on C compilers. On C++ compilers it just remove the errors when I try
to compare two pthread_t values.
I'm trying to find a more elegant solution, but I'm just staring at
the monitor and nothing pops up in my brain.
On 5/15/06, Will Bryant <firstname.lastname@example.org> wrote:
Bear in mind that pthreads-win32 is written in C, and operator
overloading is a C++ feature, so adding that would prevent
pthreads-win32 from compiling with C apps.
One alternative is to make a custom comparator type and use that in the
map declaration - or you could even simply move those operator overloads
to your own units (they don't have to be defined where the type being
compared is declared, as long as they've visible at the point where
they're used - ie. your map declaration).
But bear in mind that in any case, making use of the ptw32_handle_t type
makes your code nonportable, and since portability is generally the
reason one is using pthreads-win32 in the first place, this is perhaps
not the best design for general use.
Paolo Brandoli wrote:
> I have a source code that uses the pthread_t as a key in a std::map.
> Because pthread-win32 defines pthread_t as a structure, the
> compilation fails.
> I added the following lines in my pthread.h header in order to allow
> the usage of pthread_t in the map:
> bool operator < (const ptw32_handle_t& left, const ptw32_handle_t& right)
> return left.p < right.p;
> bool operator > (const ptw32_handle_t& left, const ptw32_handle_t& right)
> return left.p > right.p;
> Paolo Brandoli