是否期望使用boost :: thread_specific_ptr <> :: get()变慢?有什么工作吗?

Cat*_*kul 13 c++ multithreading boost boost-thread

我目前正在使用Valgrind的"Callgrind"来分析具有性能问题的应用程序.在查看分析数据时,似乎boost::detail::get_tss_data在主要用于物理模拟和可视化的应用程序中花费了25%的处理时间.

get_tss_data 显然被称为 thread_specific_ptr::get

有没有人按预期看到这个?它通常意味着其他具体的东西吗?

编辑:

我的平台是:Linux-2.6.32,x86,GCC 4.4.3,libc6-2.11.1/libpthread-2.11.1

ipa*_*dop 4

thread_specific_ptr对于 POSIX 系统使用pthread_setspecific/ pthread_getspecific,这不是最快的。

如果您使用的是 POSIX 系统,则可以使用__thread存储说明符。但是,它只能与常量表达式的初始值设定项一起使用,例如gcc 的 __thread

对于 Windows,类似的说明符是 _declspec(thread).

  • 即使像 __thread 这样的东西也可能会进行系统调用,并且可能会有点慢,因此请尝试在普通堆栈或堆变量中尽可能多地缓存线程本地存储。 (2认同)