Boost logo

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