1

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

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

有一个类型的变量thread_local不能(容易)覆盖的语义吗?staticcombinable<T>

thread_local如果不是,如果可以在库中实现,为什么要添加到核心语言中?

4

1 回答 1

3

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

有些功能更重要,需要更多的实现。thread_local是一个存储类说明符,所以它可以在编译时知道,编译器可以做更多的优化。

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

线程变量动态初始化

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

为什么thread_local被引入作为一个新的语言关键字?似乎原因可能是Thread Variable Dynamic Initialization

于 2010-08-23T14:43:43.013 回答