|
Boost : |
From: Howard Hinnant (hinnant_at_[hidden])
Date: 2007-03-26 15:36:40
On Mar 26, 2007, at 3:16 PM, Roland Schwarz wrote:
> Howard Hinnant wrote:
>> layer (and that has been my sense from the boost community as well:
>> "I
>> want boost + cancellation").
>
> May I drop in an innocent (or blaspheming?) question?
Please do! :-)
> Why do we want cancellation?
Good question. It is part of the pthreads model and has been
requested a lot from clients of boost::thread. It arguably (and I
didn't realize this at first) provides the needed semantics of
~thread():
thread::~thread()
{
if (joinable())
{
cancel();
detach();
}
}
I.e. if the parent thread leaves the room unexpectedly, what do you
want to happen to the child thread? boost::thread simply detaches.
And upon reflection, I think that can delay resource cleanup of the
child thread for an unreasonably long time.
> Which kind of cancellation do we want (if at all)?
In pthreads vocabulary: only deferred. Nobody even wants to talk
about asynchronous cancellation. But some, because of the pthreads
history, would prefer us to use a different name for "cancel" so that
there is no such confusion.
> Do we really need true async cancellation, or suffices to be able
> to control a thread at certain (well defined) points.
<nod> Only the latter.
> Wouldn't 90% of the users be happy if they just be able to instruct
> a thread to stop while it is in an (idling) wait loop without
> need to resort to custom (boiler plate) IPC mechansims?
That is essentially what we're after. N2184 recommends very few
cancellation points:
void std::this_thread::cancellation_point()
void std::this_thread::sleep(std::nanoseconds rel_time)
void std::thread::join()
void std::thread::operator()()
void std::condition<Lock>::wait(Lock&)
template<class Predicate> void std::condition<Lock>::wait(Lock&,
Predicate)
bool std::condition<Lock>::timed_wait(Lock&, std::nanoseconds)
template<class Predicate> void
std::condition<Lock>::timed_wait(Lock&, std::nanoseconds, Predicate)
N2178 has the same outlook but recommends considerably more
cancellation points (the entire posix set if I understand correctly).
-Howard
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk