Met*_*est 10 c linux multithreading gcc x86-64
我在我的代码中读取线程局部变量,如下所示,
// tid_local is declared as __thread int tid_local;
long tid = tid_local
Run Code Online (Sandbox Code Playgroud)
看看反汇编的代码,我看到了类似的东西,我怀疑这是通过读取tid_local来指定tid的指令.
movslq %fs:0xfffffffffffffffc,%rbx
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,这是否真的可以成为执行此操作的指令,即从本地线程变量读取,以及gcc是否始终使用fs段存储线程局部变量.这应该怎么样?
NPE*_*NPE 12
是的,这可能是正确的指示.从gcc 手册:
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs控制是否可以使用TLS段寄存器的偏移量访问TLS变量(32位为%gs,64位为%fs),或者是否必须添加线程基址指针.这是否合法取决于操作系统,以及它是否映射该段以覆盖整个TLS区域.
编辑以下是@janneb在评论中提出的一个很好的链接:http://www.akkadia.org/drepper/tls.pdf
| 归档时间: |
|
| 查看次数: |
2739 次 |
| 最近记录: |