小编Eva*_*ois的帖子

线程本地存储变量的地址

好吧,说我有

__thread int myVar;
Run Code Online (Sandbox Code Playgroud)

然后我将&myVar从一个线程传递到另一个线程...如果数据真的是"本地",那么1个线程的TLS存储可能无法映射到其他线程的地址空间,事实上,你可能会认为它不应该不会.这会导致SIGSEGV或其他东西.但是,系统可以将相同的地址映射到不同的页面.这是Linux用.tbss/.tdata做的吗?在这种情况下,传递变量的地址将为您提供错误变量的地址!您将获得自己的本地副本,而不是您尝试传递的副本.或者,是否所有内容都共享并映射到不同的虚拟地址 - 允许您传递__thread vars的地址?

显然,应该通过传递其地址来尝试将线程本地存储传递到另一个线程来殴打和鞭打.还有一百万种其他方式 - 例如复制到任何其他变量!但是,如果有人知道,我很好奇.

  1. 这位官员描述了这种情况下的行为
  2. 目前的GCC/Linux实现细节

- 埃文

linux gcc thread-local-storage

4
推荐指数
1
解决办法
1479
查看次数

标签 统计

gcc ×1

linux ×1

thread-local-storage ×1