Я знаю, что с C++ 03 стандарта, функциональный объем статические инициализации, как гарантируют, не будут ориентированы на многопотоковое исполнение:
void moo()
{
static std::string cat("argent"); // not thread safe
...
}
С C++ 0x стандарт, наконец оказывающий поддержку стандартной резьбы, функциональный объем статические инициализации, требуемые быть ориентированными на многопотоковое исполнение?
кажется, что инициализация была бы потокобезопасной, поскольку в случае динамической инициализации объекта при входе в функцию он гарантированно выполняется в критической секции:
4. ...такой объект инициализируется при первом прохождении контроля через его декларацию.... Если элемент управления входит в объявление одновременно с инициализацией объекта, то параллельное выполнение должно ждать завершения инициализации...
существует потенциальный краевой случай, если после возврата из main() деструктор статического объекта вызовет функцию после того, как статическая локаль уже уничтожена, поведение будет неопределенным. Однако этого легко избежать.
.