|
Boost Users : |
Subject: Re: [Boost-users] [system] local static and threading in C++03
From: Felipe Magno de Almeida (felipe.m.almeida_at_[hidden])
Date: 2012-12-26 09:35:26
Hello Vicente,
On Tue, Dec 25, 2012 at 6:28 PM, Vicente Botet <vicente.botet_at_[hidden]> wrote:
> Felipe Magno de Almeida wrote
>> Hello,
[snip - source code]
>> But couldn't this make double construction/double free in C++03 systems
>> if system_category is ran concurrently?
>
> Yes sure, this is always possible zith c++0·.
Not always possible. It is only possible for non-PODs. AFAIK.
> Do you see a problem with this implementation?
Since it has a race-condition, I would say I see a problem, yes.
More so since it is not documented. AFAIK, the normal solution
for this is to use call_once.
system_category const& create_system_category()
{
system_category const category;
return category;
}
void init_system_category() { create_system_category(); }
once_flag init_flag = BOOST_ONCE_INIT;
system_category const& get_system_category()
{
boost::call_once(init_flag, &init_system_category);
return create_system_category();
}
> Best,
> Vicente
Regards,
-- Felipe Magno de Almeida
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