Стандарт C ++ не гарантирует безопасности потоков при статической инициализации - вы должны рассматривать статическую инициализацию как требующую явной синхронизации.
Цитата Александра Гесслера дает:
Если контроль вводит декларацию
одновременно в то время как объект
инициализировано, параллельное выполнение
должен ждать завершения
инициализация
взято из черновика C ++ 0x и не отражает текущий стандарт C ++ или поведение многих компиляторов C ++.
В текущем стандарте C ++ этот отрывок гласит:
Если элемент управления повторно входит в объявление (рекурсивно), пока объект находится
инициализировано, поведение не определено