C ++ 0x添加了一个尚未在VS10中实现的新存储说明符thread_local
。
然而,并行编程库定义了一个Concurrency::combinable
class,它具有local()
函数,其中返回对线程私有子计算的引用。
thread_local
的语义是否因static
类型的combinable<T>
变量而无法(轻松)覆盖?
如果没有,为什么thread_local
如果可以在库中实现则添加到核心语言中?
答案 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
被引入为新的语言关键字?似乎原因可能是线程变量动态初始化。