Boost logo

Boost :

Subject: [boost] [async] joiner RAII (was Re: [thread] Do we need thread_group now?)
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2012-04-15 05:12:19


Le 15/04/12 09:46, Ben Pope a écrit :
> On Sunday, April 15, 2012 08:22 AM, Vicente J. Botet Escriba wrote:
>> E.g. I have started to implement some breaking changes on
>> Boost.Thread as e.g. an incompatibility with the C++11 semantics of
>> the thread destructor. Boost.Thread detach the thread at destruction
>> time, C++11 calls std::terminate if the thread is joinable at
>> destruction time. I have already started the stage 0th and I would
>> like to pass to the stage 1st for the next release.
>
> In this case, it would be useful to have RAII classes for joining and
> detaching to prevent std::terminate from being called. In fact, I
> think Anthony writes in his book that scope based thread_joiner should
> be implemented by the user since it didn't make the standard.
>
Hi,

The breaking change is due to an incompatibility with the C++ standard.
I think it is better to behave like the standard and add something on
top of it.

Kevlin Henney proposed a different design for C++ threads
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1883.pdf
"Preliminary Threading Library Proposal for TR2" that was based on the
idea that the creation of a thread return always a RAII movable joiner.

{
   joiner j = thread(...);
}

The standard use of futures and async is quite close

{
   future<T> ft = async(...);
}

but here the thread is no more managed by the user.

Long time ago, I implemented something like that on top of Boost.Thread
on TBoost.Async that is a mix of a RAII joiner and a future. The class
had a parameter to control the destruction behavior

     enum type {
         do_terminate,
         do_join,
         do_detach
     };

( See
<https://svn.boost.org/svn/boost/sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.template_class__shared_joiner___>).
Unfortunately this has not been updated even tested since a long time
also and the documentation need some work also :(

IMO, TBoost.Async provides an interesting framework for asynchronous calls.

Let me know if there is an interest to resurecting this project. I will
comeback to as soon as possible to check it works yet and adapt it to
the new standard interface.

Best,
Vicente


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