为什么编译器不支持c ++ 11 thread_local存储?

时间:2011-11-05 23:02:04

标签: c++ compiler-construction c++11 thread-local

AFAIK g ++和cl都支持编译器特定的TL存储......所以我想知道C ++ 11 TLS与他们现在支持的不同吗?

  

线程本地存储(TLS)是每个线程中的一个方法   给定多线程进程可以分配存储的位置   特定于线程的数据。动态绑定(运行时)特定于线程   通过TLS API支持数据([TlsAlloc],[TlsGetValue],   [TlsSetValue]和[TlsFree])。 Win32和Visual C ++编译器现在   除了支持静态绑定(加载时间)每线程数据   现有的API实现。

对于VS 11 支持也列为部分支持。 对于g ++,它甚至不在GCC4.7

2 个答案:

答案 0 :(得分:3)

使用g ++,它非常接近,至少对于基于ELF的系统。只需用。编译  -Dthread_local=__thread并且你得到了大部分内容 - 唯一的问题是没有被调用的构造函数和析构函数,但只要你使用POD类型作为线程局部变量就不是问题。

答案 1 :(得分:1)

该标准仅在一个月前发布。我相信很多设计会议等都会在他们开始这么大的任务之前进行。顺便说一句,大多数c ++编译器都不完全支持标准的C ++ 98版本 - 所以请耐心等待。