Помню, что статические переменные, объявленные внутри методов, не являются потокобезопасными. (См What about the Meyer's singleton?, как упомянуто Todd Gardner)Неподвижные статические переменные без мьютексинга?
Dog* MyClass::BadMethod()
{
static Dog dog("Lassie");
return &dog;
}
Моя библиотека генерирует C++ код для конечных пользователей, чтобы собрать как часть их применения. Созданный им код должен инициализировать статические переменные в поточно-безопасном межплатформенном режиме. Я хотел бы использовать boost::call_once
для mutex инициализацию переменных, но затем конечные пользователи подвергаются зависимости Boost.
Есть ли способ для меня сделать это, не вызывая дополнительных зависимостей от конечных пользователей?
Вы также можете статически ссылаться в библиотеках ускорения на свои собственные, тогда вы можете использовать boost все, что хотите, не опасаясь причинить неудобства своим пользователям. – Ben
Возможный дубликат [Является ли локальная статическая переменная инициализацией потокобезопасной в C++ 11?] (Http://stackoverflow.com/questions/8102125/is-local-static-variable-initialization-thread-safe-in-c11) –
@LucianAdrianGrijincu, этот вопрос предшествует C++ 11 (он был опубликован в 2009 году), поэтому, хотя ваш вопрос связан с этим, он не является строгим дубликатом. Спасибо за ссылку. – Gili