出于好奇。在过去,由于boost::to_lower
在分配了惰性方面时CriticalSection
中使用了std::use_facet
,我发现CriticalSection
等功能会出现性能下降。据我记得,有一个全局锁定区域设置的错误,但根据Stephan Lavavej,它已在VS2013中修复。瞧,昨天我看到了锁定服务器性能的方面,所以我想我混淆了两个不同的问题。
但首先,为什么在懒惰的方面有一个{{1}}?显然它会破坏性能。为什么他们没有决定对指针进行某种可升级的锁定或原子操作?
答案 0 :(得分:5)
MSVC ++ std::locale
是根据底层C函数setlocale
实现的。这涉及全球状态,因此必须受到锁定的保护。
遗憾的是,更改数据结构的锁定语义是ABI的重大变化,因此我们暂时无法做到这一点。