AFAIK g ++和cl都支持编译器特定的TL存储...所以我想知道的是C++ 11 TLS不同于他们现在支持的东西吗?为什么编译器不支持C++ 11 thread_local存储?
线程本地存储(TLS)是通过其在给定的 多线程进程的每个线程可以分配在其中存储 线程特定数据的位置的方法。通过TLS API([TlsAlloc],[TlsGetValue], [TlsSetValue]和[TlsFree])支持动态绑定(运行时)线程专用的 数据。除了 现有的API实现之外,Win32和Visual C++编译器现在支持 每个线程数据的静态绑定(加载时间)。
也适用于VS 支持列为部分。 对于g ++,它甚至不在GCC4.7中
嗯,MS中的*“partial”*支持意味着,*“我们有一个相似的特性,只是它不是C++ 11的特性,但是在相同的平台相关代码中使用完全不同的语法和结果可能已经在C++ 11之前写了几年*,因此简单地翻译为*“no”*。 –
鉴于2013年4月以前只有GCC 4.8支持此功能,因此可能并不容易。实际上,只有GCC 4.8支持'thread_local'的构造和销毁语义。如果你想在GCC 4.7(或更早的版本)或MSVC中的'__declspec(thread)'中用'__thread'定义一个C++对象(具有构造函数或析构函数),编译器将会抱怨。铿锵编译我的对象用'__thread'标记好,但它不会为每个新线程创建对象。 –