Boost logo

Boost :

From: Alexander Terekhov (terekhov_at_[hidden])
Date: 2001-08-03 05:21:19


> > The Wait* operations in Win32 threading are both extremely nice, and
> > a major pain. Boost.Threads doesn't directly support any concepts
> > similar to WaitForMultipleObjects (other than
> > thread_group::join_all). However, it's not difficult to do what you
> > want here using a condition variable, though this requires support
> > from the threads which will have to notify_one/all() the condition.
> >
>
> Yes, I'm also considering this. It will work as long as the thread exits
by
> some "normal" means, which it always should (i.e., by returning from the
> thread function, not because something called
> _endthreadex/pthread_exit/etc).

returning from the thread function has the same affect as calling
pthread_exit.

"The pthread_exit( ) function shall terminate the calling thread
 and make the value value_ptr available to any successful join
 with the terminating thread. Any cancelation cleanup handlers
 that have been pushed and not yet popped shall be popped in the
 reverse order that they were pushed and then executed. After all
 cancelation cleanup handlers have been executed, if the
 thread has any thread-specific data, appropriate destructor
 functions shall be called in an unspecified order. Thread
 termination does not release any application visible process
 resources, including, but not limited to, mutexes and file
 descriptors, nor does it perform any process-level cleanup actions,
 including, but not limited to, calling any atexit ( ) routines that
 may exist. An implicit call to pthread_exit() is made when a thread
 other than the thread in which main() was first invoked returns from
 the start routine that was used to create it. The function's return
 value shall serve as the thread's exit status."

> I just thought it would be a bit more
> robust if I could also get asynchronous notification in all cases.

you can easily build robust notification mechanism via
incorporating the code in some cancellation cleanup handler
(and using pthread_cleanup_pop() with a non-zero "execute"
argument) or doing it in some thread specific data destructor.
the difference with respect to windows model is that that
notification mechanism is not a part of any thread; it is
some extra monitor (shared data protected by mutex and CV(s)
used to wait for state(s) changes). windows uses thread handle
replication mechanism which is "simple" but is really an
overkill, IMHO.

regards,
alexander.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk