C++ 0x статические инициализации и потокобезопасность

Я знаю, что с C++ 03 стандарта, функциональный объем статические инициализации, как гарантируют, не будут ориентированы на многопотоковое исполнение:

void moo()
{
    static std::string cat("argent");  // not thread safe
    ...
}

С C++ 0x стандарт, наконец оказывающий поддержку стандартной резьбы, функциональный объем статические инициализации, требуемые быть ориентированными на многопотоковое исполнение?

10
задан Rob 1 January 2010 в 01:45
поделиться

1 ответ

кажется, что инициализация была бы потокобезопасной, поскольку в случае динамической инициализации объекта при входе в функцию он гарантированно выполняется в критической секции:

§ 6.7 stmt.decl

4. ...такой объект инициализируется при первом прохождении контроля через его декларацию.... Если элемент управления входит в объявление одновременно с инициализацией объекта, то параллельное выполнение должно ждать завершения инициализации...

существует потенциальный краевой случай, если после возврата из main() деструктор статического объекта вызовет функцию после того, как статическая локаль уже уничтожена, поведение будет неопределенным. Однако этого легко избежать.

.
9
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: