From: Jonathan Turkanis (technews_at_[hidden])
Date: 2005-08-02 16:58:51
Jason Hise wrote:
> Jonathan Turkanis wrote:
>> Jason Hise wrote:
>>> So to avoid the whole mess regarding the DCLP, the best approach
>>> would probably be eager initialization, before the program enters
>>> a multi-threaded context. Is initializing from the constructor of
>>> a namespace-scope global enough to ensure this?
>> I don't think so, since you might want to access singletons from
>> static initializers in other translation units.
>> Have you considered using call_once:
> Why does it require that the function which is called once not be
> allowed to throw? I am not sure that I can meet this requirement, as
> may need to dynamically allocate memory.
Whoops! I forgot about that. In the example I gave, you can use boost::optional.
If the construction of your object can throw, I think you can use the above
method to construct a mutex (in a buffer using placement new) and use the mutex
to synchronize construction of the object.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk