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

kre*_*ieg 13 c++ multithreading locale visual-c++

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

Bil*_*eal 5

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

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

  • 不知道; 我想你不得不问Dinkumware.我不认为这个东西在过去十年中被触及过:/ (2认同)