Tag: 线程本地存储

线程本地存储为什么这么慢?

我正在为D编程语言的自定义标记释放样式内存分配器工作,通过从线程本地区域分配。 看起来线程局部存储瓶颈导致了从这些区域分配内存的速度(〜50%)相比于其他相同的单线程版本的代码,甚至在devise我的代码后,每个分配/释放。 这是基于在一个循环中分配/释放内存很多次,我正在试图弄清楚它是否是我的基准testing方法的人为因素。 我的理解是线程本地存储基本上只需要通过一个额外的间接层来访问某些东西,类似于通过指针访问一个variables。 这是不正确的? 线程本地存储通常有多less开销? 注意:尽pipe我提到了D,但是我也对D中没有特定的一般答案感兴趣,因为如果D的实现比最好的实现慢,D的线程本地存储的实现可能会改进。

C ++ 11的thread_localvariables是否自动静态?

这两个代码段是否有区别: void f() { thread_local vector<int> V; V.clear(); … // use V as a temporary variable } 和 void f() { static thread_local vector<int> V; V.clear(); … // use V as a temporary variable } Backstory:原本我有一个STATIC向量V(用于保存一些中间值,每当我进入函数时它都被清除)和一个单线程程序。 我想把程序变成一个multithreading,所以我不得不摆脱这个静态修饰符。 我的想法是将每个静态变成thread_local,而不是担心别的? 这种方法能适得其反吗?

如何分配线程本地存储?

我在我的函数中有一个variables是静态的,但我希望它在每个线程的基础上是静态的。 我怎样才能为我的C ++类分配内存,使得每个线程都有自己的类实例副本? AnotherClass::threadSpecificAction() { // How to allocate this with thread local storage? static MyClass *instance = new MyClass(); instance->doSomething(); } 这是在Linux上。 我没有使用C ++ 0x,这是gcc v3.4.6。

thread_local在C ++ 11中意味着什么?

我对C ++ 11中的thread_local的描述感到困惑。 我的理解是,每个线程都有一个函数中局部variables的唯一副本。 全局/静态variables可以被所有线程访问(可能使用locking同步访问)。 thread_localvariables对所有线程都是可见的,但是只能由定义它们的线程修改。 这是对的吗?