Using pthread_t as a key in a map
Paolo Brandoli
paolo.brandoli@gmail.com
Mon May 15 11:57:00 GMT 2006
Hi Will,
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
win32-pthread).
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.
Paolo Brandoli
On 5/15/06, Will Bryant <will.bryant@ecosm.com> wrote:
> Hi Paolo,
>
> 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.
>
> Will
>
>
> 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;
> > }
> >
> > Bye
> > Paolo Brandoli
> > http://www.puntoexe.com
> >
>
>
> --
> Will Bryant
>
>
>
>
More information about the Pthreads-win32
mailing list