静态可组合<t>可以用作thread_local的占位符吗?</t>

时间:2010-08-11 14:27:07

标签: visual-studio-2010 c++11 thread-local

C ++ 0x添加了一个尚未在VS10中实现的新存储说明符thread_local

然而,并行编程库定义了一个Concurrency::combinable class,它具有local()函数,其中返回对线程私有子计算的引用

thread_local的语义是否因static类型的combinable<T>变量而无法(轻松)覆盖?

如果没有,为什么thread_local如果可以在库中实现则添加到核心语言中?

1 个答案:

答案 0 :(得分:3)

为什么C ++添加 class 对象是否可以由库实现,就像 GObject 在C中做的那样?因为C ++希望编译时知道对象,所以这更有效。因此,C ++类初始化/取消初始化是异常安全的(RAII)。

某些功能更为重要,需要进行更多实施。 thread_local 存储类说明符,因此可以在编译时中知道,编译器可以进行更多优化。

同样在http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm说过:

  

线程变量动态初始化

     

目前,线程局部存储的所有实现不支持动态初始化(并且可能是非平凡的析构函数)。在Mont Treblant会议上达成了一致意见,以支持函数本地线程局部变量的动态初始化。这些变量的初始化已经得到保护和同步,因此不需要新技术。另一方面,名称空间范围变量的动态初始化实现困难可能需要额外的链接器和操作系统支持

为什么thread_local被引入为新的语言关键字?似乎原因可能是线程变量动态初始化