2017-07-18 77 views
14

我期待整数类型转换为使用std::to_string字符串,但我看到这一段:是std :: to_string线程安全吗?

std::to_string依靠std::locale用于格式化和 因此并发调用std::to_string从多个线程可能 导致局部串行的电话。

但是我在这个话题上找不到任何其他的东西,Google没有像MSDN那样提供任何智慧。如果它很重要,我正在使用Visual Studio 2013。

此线程安全吗?如果是这样,怎么样?

+8

关于该引号的任何内容都表示它不是线程安全的。只是多个呼叫可能不会同时运行。这是一个性能问题,而不是安全问题。 – NathanOliver

+1

@Nathan问题是std :: locale线程安全吗? –

+1

@NeilButterworth它的一部分不是。例如'setlocale'不是线程安全的,所以'std :: to_string'可能会使用互斥锁来确保多个调用在调用时不会竞争。 – NathanOliver

回答

7

std::to_string的行为就好像它调用sprintf[string.conversions]/7),以及sprintf行为取决于全局区域设置,其可通过setlocale(或由std::locale::global,其内部调用setlocale)进行修改。

[clocale.syn]/2的措辞似乎暗示std::to_string是线程安全的,因为它不允许setlocale引入数据争用std::to_stringsprintf

+0

谢谢你的详细解答 – roybj