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 重大更改,因此我们暂时无能为力。
出于好奇。过去,我曾看到像 boost::to_lower
这样的函数性能下降,因为在分配惰性方面时 std::use_facet
中使用了 CriticalSection
。据我所知,在区域设置上有一个全局锁定的错误,但根据 Stephan Lavavej 的说法,它已在 VS2013 中修复。瞧,我昨天看到了对 facet killing 服务器性能的锁定,所以我想我混淆了两个不同的问题。
但是首先,为什么惰性面周围有一个 CriticalSection
?显然它会破坏性能。为什么他们不解决指针上的某种可升级锁或原子操作?
MSVC++的std::locale
是根据底层C函数setlocale
实现的。这涉及全局状态,因此必须由锁保护。
不幸的是,更改数据结构的锁定语义是一项 ABI 重大更改,因此我们暂时无能为力。