В какой-то момент я помню, что чтение нитей невозможно создать до первой строки main(), потому что компиляторы вставляют специальный код для выполнения работы по потоку, который выполняется во время статической инициализации. Поэтому, если у вас есть глобальный объект, который создает поток при конструировании, ваша программа может произойти сбой. Но теперь я не могу найти оригинальную статью, и мне любопытно, насколько сильно это ограничение - строго ли это по стандарту? Это верно для большинства компиляторов? Будет ли оно оставаться верным в C++ 0x? Возможно ли, чтобы компилятор, соответствующий стандарту, сам создал статическую инициализацию многопоточность? (например, обнаружение того, что два глобальных объекта не касаются друг друга и инициализируют их на отдельных потоках, чтобы ускорить запуск программы)Можно ли безопасно создавать потоки во время статической инициализации?
Редактировать: Чтобы уточнить, я стараюсь, по крайней мере, понять, действительно ли реализации существенно различаются в этом отношении, или если это то, что является псевдостандартом. Например, технически стандарт позволяет перетасовывать макет элементов, принадлежащих разным спецификаторам доступа (public/protected/etc.). Но никакой компилятор, которого я знаю, на самом деле не делает этого.
«это строго верно по стандарту» - стандарт C++ 03 не имеет права говорить по теме потоков. Места, чтобы посмотреть, что касается текущего поведения, будет POSIX (который, конечно, * стандартный *, а не * * стандартный), MSDN, Boost или другие документы для конкретной реализации для API компилятора, платформы и потоков использовать. –