Thread-Local Storage: TLS

Thread-Local Storage

http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Thread-Local.html

Thread-local storage (TLS) is a mechanism by which variables are allocated such that there is one instance of the variable per extant thread. The run-time model GCC uses to implement this originates in the IA-64 processor-specific ABI, but has since been migrated to other processors as well. It requires significant support from the linker (ld), dynamic linker (ld.so), and system libraries (libc.so and libpthread.so), so it is not available everywhere.


At the user level, the extension is visible with a new storage class keyword: __thread. For example:  

    __thread int i;
     extern __threadstruct state s;
     static __threadchar *p;
     
The __thread specifier may be used alone, with the extern or static specifiers, but with no other storage class specifier. When used with extern or static, __thread must appear immediately after the other storage class specifier.
-thread只能单独、extern或者static的使用,其他方式都不行。


The __thread specifier may be applied to any global, file-scoped static, function-scoped static, or static data member of a class. It may not be applied to block-scoped automatic or non-static data member.


When the address-of operator is applied to a thread-local variable, it is evaluated评估 at run-time and returns the address of the current thread's instance of that variable. An address so obtained may be used by any thread. When a thread terminates, any pointers to thread-local variables in that thread become invalid.
当&被用于一个线程的局部变量,会运行时的返回当前线程的变量实例的地址,这样获取的地址可以被任意线程使用。当一个线程结束,那个线程中,任何一个指向线程的局部变量的指针都是不可用的。


No static initialization may refer to the address of a thread-local variable.
非惊天的初始化,可以参考一个局部线程的地址。

In C++, if an initializer is present for a thread-local variable, it must be a constant-expression, as defined in 5.19.2 of the ANSI/ISO C++ standard.


See ELF Handling For Thread-Local Storage for a detailed explanation of the four thread-local storage addressing models, and how the run-time is expected to function.


C99 Thread-Local Edits:
C++98 Thread-Local Edits:











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值