出于好奇。过去,由于分配了惰性构面时,由于boost::to_lower
中使用了CriticalSection
,因此我已经看到std::use_facet
等功能的性能下降。据我所知,存在一个在全局语言环境中锁定的错误,但据Stephan Lavavej称,此错误已在VS2013中修复。瞧,昨天我看到此方面的锁定会破坏服务器性能,所以我想我在混淆两个不同的问题。
但是首先,为什么在懒惰的方面周围有一个CriticalSection
?显然它将破坏性能。为什么他们没有解决对指针的某种可升级的锁或原子操作?
最佳答案
MSVC++的std::locale
是根据基础C函数setlocale
实现的。这触及了全局状态,因此必须受到锁的保护。
不幸的是,更改数据结构的锁定语义是一项ABI重大更改,因此一段时间内我们将无法对此做很多事情。