Является ли 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.