Boost logo

Boost :

Subject: Re: [boost] [thread] terminating destructor
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2012-10-10 08:56:19


2012/10/10 Vicente J. Botet Escriba <vicente.botet_at_[hidden]>

> Le 10/10/12 10:23, Andrzej Krzemienski a écrit :
>
> Hi,
>> I can see in the release notes that in Boost 1.52 boost::thread's
>> destructor calls terminate if joinable, in order to conform to C++11
>> specification. I am not sure if this is the best course of action.
>> My understanding -- form the C++ Committee papers and informal
>> presentations -- is that the reason for introducing a 'terminating
>> destructor' was the lack of thread cancellation/interruption
>> functionality.
>> Thread interruption is supposed to be the preferred behavior for thread's
>> destructor. std::thread does not support interruption (for some reasons),
>> but boost::thread does (this is already a departure from C++11), so
>> shouldn't the latter prefer to interrupt a joinable thread in the
>> destructor?
>>
>>
>> Hi,
>
> yes this is a possible alternative to the standard behavior. But what to
> do after interrupting, joining? What others think? Anthony?
>

My preference would be to join after the interruption. If I remember
correctly, the argument against joining for std::thread is that there would
be an unexpected hang upon reaching the end of the scope. The argument
against detaching for std::thread is that the detached thread may be
holding references to automatic variables defined in the scope of the
forking thread that we are now exiting.

I believe that with thread interruption in place the argument against
joining is mitigated, while the argument against detaching still holds.

Regards,
&rzej


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