std::locale/std::facet 临界区

std::locale/std::facet Critical section

出于好奇。过去,我曾看到像 boost::to_lower 这样的函数性能下降,因为在分配惰性方面时 std::use_facet 中使用了 CriticalSection。据我所知,在区域设置上有一个全局锁定的错误,但根据 Stephan Lavavej 的说法,它已在 VS2013 中修复。瞧,我昨天看到了对 facet killing 服务器性能的锁定,所以我想我混淆了两个不同的问题。
但是首先,为什么惰性面周围有一个 CriticalSection?显然它会破坏性能。为什么他们不解决指针上的某种可升级锁或原子操作?

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

不幸的是,更改数据结构的锁定语义是一项 ABI 重大更改,因此我们暂时无能为力。