Take advantage of thread-local storage by declaring thread-local variables. A thread-local variable declaration consists of a normal variable declaration with the addition of the variable specifier __thread. For more information, see B.2.146 -xthreadvar[=o].
You must include the __thread specifier in the first declaration of the thread variable in the source file being compiled.
You can only use the __thread specifier in the declaration of an object with static storage duration. You can statically initialize a thread variable as you would any other object of static-storage duration.
Variables that you declare with the __thread specifier have the same linker binding as they would without the __thread specifier. This includes tentative definitions, such as declarations without initializers.
The address of a thread variable is not a constant. Therefore, the address-of operator (&) for a thread variable is evaluated at run time and returns the address of the thread variable for the current thread. As a consequence, objects of static storage duration are initialized dynamically to the address of a thread variable.
The address of a thread variable is stable for the lifetime of the corresponding thread. Any thread in the process can freely use the address of a thread variable during the variable’s lifetime. You cannot use a thread variable’s address after its thread terminates. After a thread terminates, all addresses of that thread’s variables are invalid.