C++ 11具有关键字thread_local。我想知道这个关键字是否仅在使用标准库(std::thread)创建的线程中可以按预期工作,或者是否可以与其他线程库一起使用,例如Windows CreateThread函数或Unix pthread。

Microsoft documentation for visual studio指出:



因此thread_local可以在MS Visual Studio中按预期工作。我仍然想知道这种情况是否适用于其他编译器和平台。

最佳答案

C++标准在[intro.multithread]/1定义了一个线程,如下所示:



请注意,以上内容完全不限于std::thread创建的线程。而且,该标准甚至承认的存在,即至少有一个执行线程(不一定由std::thread创建)存在于[intro.progress]/8上:



此外,尽管以下内容是注释,不能被视为规范性的内容,但阅读[thread.threads]/1仍然令人鼓舞:



对我来说,这一切都表明任何thread_local存储都可以在符合上述定义的任何“执行线程”中使用,而不管它是由std::thread创建还是由某种实现定义的方式创建。我不希望有一个理智的托管实现会出现其他情况。

09-10 05:20
查看更多