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

why compilers dont support c++11 thread_local storage?

本文关键字:local 存储 thread c++11 编译器 不支持 为什么      更新时间:2023-10-16

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

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

同样对于VS 11支持被列为部分。GCC4.7

对于g++,它非常接近,至少对于基于elf的系统。用
编译-Dthread_local=__thread,你得到了它的大部分——唯一的问题是没有调用构造函数和析构函数,但只要你使用pod类型为你的线程局部变量,这不是一个问题。

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