在c++0x中使用__thread

Using __thread in c++0x

本文关键字:thread c++0x      更新时间:2023-10-16

我读到c++中有一个新的关键字:__thread

我只知道它是一个关键字,像static关键字一样被使用,但我什么都不知道。这个关键字是否意味着,例如,如果像这样声明一个变量:

__thread int foo;

那么与该变量有关的任何内容都将在新线程中执行?

thread_local,不是__thread。它用于定义具有线程存储时间的变量。

thread_local是c++ 0x中新增的存储时间指定符。还有静态自动动态

从这个链接:

线程本地存储时间(c++ 11特性)。该变量在线程开始时被分配,在线程结束时被释放。每个线程都有自己的变量实例。只有声明为thread_local的变量才有这个存储时间。


我认为这个关键字的引入是通过在c++ 0x中引入一个标准化的内存模型来实现的:

    c++ 11引入了一个标准化的内存模型。这是什么意思?它将如何影响c++编程?

摘自维基百科关于"线程本地存储"的文章:

线程本地存储(TLS)是一种使用线程的局部静态或全局内存

这有时是需要的,因为通常一个进程中的所有线程共享相同的地址空间,这有时是不希望的。

:

c++ 0x引入了thread_local关键字。除此之外,还有各种c++编译器实现提供了声明线程局部的特定方法变量:

Sun Studio C/c++, IBM XL C/c++, GNU C和Intel C/c++ (Linux系统)使用语法:

    __thread int number;

Visual c++, Intel C/c++ (Windows系统),Borland c++ Builder和Digital Mars c++使用语法:

    __declspec(thread) int number;

Borland c++ Builder也支持以下语法:

    int __thread number;

因此,虽然__thread 确实存在于实践和某些系统中,但thread_local是新的,官方的c++ 0x关键字,它做同样的事情。

当您可以访问c++ 0x时,请选择非标准__thread

关键字为thread_local。这意味着每个线程都有自己版本的变量

不,不是意味着"与该变量有关的任何内容都将在新线程中执行"。这意味着每个存在的线程都有一个变量的副本,每个线程只能看到它自己的变量副本。