В примере кода
void foo()
{
static Bar b;
...
}
скомпилированный с GCC, гарантировано, что b
будет создан и инициализирован поточно-безопасным способом?
На странице gcc man найдите опцию командной строки -fno-threadsafe-statics:
Не используйте дополнительный код для использования подпрограмм, указанных в С++ ABI для поточно-безопасная инициализация локальных статика. Вы можете использовать этот параметр для немного уменьшите размер кода в коде, который не нуждается в потокобезопасности.
-
Означает ли это, что локальная статика по умолчанию защищена потоками GCC? Поэтому нет оснований для явной защиты, например. с
pthread_mutex_lock/unlock
? -
Как написать переносимый код - как проверить, добавит ли компилятор его охранники? Или лучше отключить эту функцию GCC?