std :: locale / std :: facet关键部分

时间:2015-04-12 04:37:28

标签: c++ multithreading visual-c++ locale

出于好奇。在过去,由于boost::to_lower在分配了惰性方面时CriticalSection中使用了std::use_facet,我发现CriticalSection等功能会出现性能下降。据我记得,有一个全局锁定区域设置的错误,但根据Stephan Lavavej,它已在VS2013中修复。瞧,昨天我看到了锁定服务器性能的方面,所以我想我混淆了两个不同的问题。
但首先,为什么在懒惰的方面有一个{{1}}?显然它会破坏性能。为什么他们没有决定对指针进行某种可升级的锁定或原子操作?

1 个答案:

答案 0 :(得分:5)

MSVC ++ std::locale是根据底层C函数setlocale实现的。这涉及全球状态,因此必须受到锁定的保护。

遗憾的是,更改数据结构的锁定语义是ABI的重大变化,因此我们暂时无法做到这一点。