Boost logo

Boost Users :

From: Howard Hinnant (hinnant_at_[hidden])
Date: 2005-08-30 11:55:04


On Aug 30, 2005, at 3:34 AM, Daniel Krügler wrote:

> Howard Hinnant wrote:
>> On Aug 29, 2005, at 3:47 PM, Peter Dimov wrote:
>>
>>
>>> I haven't studied the threadmon code in detail, though. It might be
>>> possible
>>> to destroy the threadmon mutex safely at some point during shutdown.
>>
>>
>> I haven't studied threadmon either. But from the sounds of it, you
>> may
>> want to consider a "phoenix" singleton, nicely documented in Andrei
>> Alexandrescu's MC++D. One hitch to get a working phoenix singleton is
>> to have a working atexit function (and I mean really working
>> correctly). There was a lwg dr report on it:
>>
>> http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#3
>>
>> which has now received TC status, meaning it is a normative part of
>> the
>> C++03 standard. I have no information on how well the various
>> platforms conform to the standard in this regard (it can be tested for
>> though).
>>
>> The idea is fairly simple. The singleton factory keeps state that
>> tells it whether the singleton is constructed or not. When the
>> singleton gets constructed, it registers a "destructor" with atexit.
>> If after the atexit runs the destructor, the singleton is needed
>> again,
>> then it recreates itself, and re-registers with atexit. A correctly
>> working atexit will properly run this newly registered function as it
>> continues to process the atexit chain.
>
> Interestingly a more recent report from Plauger - but still open -
> recommends a contradictory advice (at least as far as I understand
> it), see
>
> http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#462

<nod> The notes (in italic) are from Lillehammer this Spring. I was
one of the voices leaning towards NAD. To be fair, getting this right
depends on cooperation between the C++ compiler, the C library and the
runtime library, which is not an easy cooperation to manage. I.e. it
is a logistical problem, not a technical one.

On the positive side also note that the "Itanium C++ ABI" correctly
addresses this issue.

http://www.codesourcery.com/cxx-abi/abi.html#dso-dtor

(at least as far as I can tell)

-Howard


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net