我期待整数类型转换为使用std::to_string
字符串,但我看到这一段:是std :: to_string线程安全吗?
std::to_string
依靠std::locale
用于格式化和 因此并发调用std::to_string
从多个线程可能 导致局部串行的电话。
但是我在这个话题上找不到任何其他的东西,Google没有像MSDN那样提供任何智慧。如果它很重要,我正在使用Visual Studio 2013。
此线程安全吗?如果是这样,怎么样?
我期待整数类型转换为使用std::to_string
字符串,但我看到这一段:是std :: to_string线程安全吗?
std::to_string
依靠std::locale
用于格式化和 因此并发调用std::to_string
从多个线程可能 导致局部串行的电话。
但是我在这个话题上找不到任何其他的东西,Google没有像MSDN那样提供任何智慧。如果它很重要,我正在使用Visual Studio 2013。
此线程安全吗?如果是这样,怎么样?
std::to_string
的行为就好像它调用sprintf
([string.conversions]/7),以及sprintf
行为取决于全局区域设置,其可通过setlocale
(或由std::locale::global
,其内部调用setlocale
)进行修改。
在[clocale.syn]/2的措辞似乎暗示std::to_string
是线程安全的,因为它不允许setlocale
引入数据争用std::to_string
或sprintf
。
谢谢你的详细解答 – roybj
关于该引号的任何内容都表示它不是线程安全的。只是多个呼叫可能不会同时运行。这是一个性能问题,而不是安全问题。 – NathanOliver
@Nathan问题是std :: locale线程安全吗? –
@NeilButterworth它的一部分不是。例如'setlocale'不是线程安全的,所以'std :: to_string'可能会使用互斥锁来确保多个调用在调用时不会竞争。 – NathanOliver