关于c ++:在c ++ 0x中使用__thread

Using __thread in c++0x

我读到C++中有一个新的关键词:从我读到的,它是EDCOX1,0。

我只知道它是一个关键字,可以像static关键字那样使用,但我不知道其他任何东西。这个关键字仅仅意味着,例如,如果变量是这样声明的:

1
__thread int foo;

那么,与该变量有关的任何事情都将用一个新线程执行?


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

EDCOX1·0是一个新的存储期限说明符,它在C++0x中被添加,还有其他的存储持续时间:静态、自动和动态。

通过此链接:

thread local storage duration (C++11 feature). The variable is allocated when the thread begins and deallocated when the thread ends. Each thread has its own instance of the variable. Only variables declared thread_local have this storage duration.

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

    百万千克1C++ 11引入了标准化内存模型。这是什么意思?它会如何影响C++程序设计?百万千克1


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

Thread-local storage (TLS) is a computer programming method that uses
static or global memory local to a thread.

This is sometimes needed because normally all threads in a process
share the same address space, which is sometimes undesirable.

以及:

C++0x introduces the thread_local keyword. Aside that, various C++
compiler implementations provide specific ways to declare thread-local
variables:

Sun Studio C/C++, IBM XL C/C++, GNU C and Intel C/C++ (Linux systems) use the syntax:

1
    __thread int number;

Visual C++, Intel C/C++ (Windows systems), Borland C++ Builder and Digital Mars C++ use the syntax:

1
    __declspec(thread) int number;

Borland C++ Builder also supports the syntax:

1
    int __thread number;

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

当您访问C++ 0x时,更喜欢使用非标准EDCOX1 2。


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


不,这并不意味着"与该变量有关的任何事情都将用新线程执行"。这意味着存在的每个线程都将有一个变量的副本,并且每个线程只能看到自己的变量副本。