В примере кодаЯвляются ли функции статическими переменными потокобезопасными в GCC?
void foo()
{
static Bar b;
...
}
скомпилирован с GCC это гарантирует, что b
будет создан и инициализирован в поточно-образом?
В справочной странице ССАГПЗ, нашел в -fno-поточно-статика командной строки вариант:
Не испустить дополнительный код, чтобы использовать процедуры, указанные в ++ ABI C для многопоточной инициализация местных статики. Вы можете использовать эту опцию в . Уменьшите размер кода немного в коде, чтобы не нуждался в потокобезопасности.
Означает ли это, что местные статика являются потокобезопасными по умолчанию с GCC? Поэтому нет оснований для явной защиты, например. с
pthread_mutex_lock/unlock
?Как написать переносимый код - как проверить, добавит ли компилятор его охранники? Или лучше отключить эту функцию GCC?
Какое использование инициализация с потоком, если у вас нет доступа к потокобезопасным (локальным функциям)? – xtofl
Для инициализации мьютекса вы будете использовать для контроля доступа к другим переменным. – AProgrammer
Если вам приходится писать переносимый код, вы не можете полагаться на инициализацию статической статистики по потоку. Например, MS C++ этого не делает. Поэтому я не согласен с пунктом 2 - вы можете безопасно отключить его, если хотите написать переносимый код, но вы не должны использовать функцию statics, где важна безопасность потоков ;-) – hirschhornsalz