Boost logo

Boost :

From: Andreas Huber (ahd6974-spamgroupstrap_at_[hidden])
Date: 2007-02-05 16:16:08


Andrey Semashev wrote:
> Hello Andreas,
>
> Monday, February 5, 2007, 11:17:32 PM, you wrote:
>
>> Fabien Niñoles wrote:
>>> Probably you should put it has a static local variable inside a
>>> protected function, like this:
>>>
>>> //! The method returns a reference to the only dispatcher
>>> instance
>>>
>>> static state_dispatcher const& get()
>>> {
>>> static state_dispatcher instance;
>>> return instance;
>>> }
>
>> In a multithreaded app this might work on some platforms, on others
>> it doesn't:
>
>> Quote from http://msdn2.microsoft.com/en-us/library/s1sb61xd.aspx:
>> "Assigning to a static local variable is not thread safe and is not
>> recommended as a programming practice."
>
>> Although this isn't very concise wording (IIRC, the standard says
>> that it should work for literals assigned to PODs) it seems clear
>> that it won't work for non-PODs...
>
> I guess the only way to safely initialize a static local variable is
> through some call_once concept implementation.

I guess so if you want to make it easy for the users. Another option
would be to require them to call a static initialize function from
main() before they start any additional threads.

-- 
Andreas Huber
When replying by private email, please remove the words spam and trap
from the address shown in the header. 

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