Является ли std:: to_string потоком безопасным?
Я хочу преобразовать целые типы в строку, используя std::to_string
, но я увидел этот абзац:
std::to_string
полагается на std::locale
для целей форматирования и поэтому одновременные вызовы std::to_string
из нескольких потоков могут приводят к частичной сериализации вызовов.
Но я не мог найти что-либо еще по этой теме, Google не придумал ничего, как MSDN. Я использую Visual Studio 2013, если это имеет значение.
Является ли этот поток безопасным? Если да, то как?
Ответы
Ответ 1
std::to_string
ведет себя так, как будто он вызывает sprintf
([string.conversions]/7) и поведение sprintf
зависит от глобальной локали, которую можно изменить с помощью setlocale
(или std::locale::global
, который внутренне вызывает setlocale
).
Формулировка [clocale.syn]/2, по-видимому, подразумевает, что std::to_string
является потокобезопасным, поскольку он не позволяет setlocale
ввести гонку данных с помощью std::to_string
или sprintf
.