当前位置: 首页 > 面试题库 >

Linux的线程本地存储实现

慎志国
2023-03-14
问题内容
__thread Foo foo;

实际上如何解决“ foo”?编译器是否以函数调用静默替换“ foo”的每个实例?“
foo”是否存储在相对于堆栈底部的某个位置,并且编译器将其存储为“嘿,对于每个线程,此空间都位于堆栈底部附近,而foo存储为’距堆栈底部的偏移量x”。 “?


问题答案:

这有点复杂(本文档对此进行了详细说明),但实际上两者都不是。而是,编译器在可执行文件中放置一个特殊的.tdata节,其中包含所有线程局部变量。在运行时,将为每个线程创建一个新的数据段,并在(只读).tdata节中创建数据副本,并且在运行时切换线程时,该节也会自动切换。

最终结果是__thread变量与常规变量一样快,并且它们也不占用额外的堆栈空间。



 类似资料:
  • 线程本地存储指针允许开发者存储值到任务的控制块(control block)中,使这个值对于任务来说是特定且唯一的。 线程本地存储经常被用来存储数据,而单一进程的应用程序通常的做法是使用全局变量。比如,很多库函数包含一个全局的返回值--错误信息,应用根据这个错误信息判读错误类型,同时进行相应处理。在单线程的应用中可以使用全局变量来保存这个错误信息,但是在多任务的系统中,每个任务都必须有一个自己的位

  • 问题内容: 如何在Python中使用线程本地存储? 有关 Python中的“线程本地存储”是什么,为什么需要它?-共享变量时,该线程似乎更加关注。 问题答案: 例如,如果您有一个线程工作池,并且每个线程都需要访问其自己的资源(例如网络或数据库连接),则线程本地存储很有用。请注意,该模块使用常规的线程概念(可以访问进程全局数据),但是由于全局解释器锁定,它们并不是太有用。不同的模块会为每个模块创建一

  • 抱歉,目前我还没有完成这个主题,请稍后再来。 如果你对这一主题感兴趣,可以参考本站的: C++小品:井水不犯河水的thread_specific_ptr,C++11线程库中的本地存储 C++小品:井水不犯河水在PPL中的实现:combinable以及task_group,task 参考: [N2659 = 08-0169] Lawrence Crowl: Thread-Local Storage

  • 问题内容: 这个问题使我想知道Java和.NET等高级开发框架中的线程本地存储。 Java有一个类(也许还有其他结构),而.NET有数据插槽,很快就有了自己的类。(它也具有,但我对成员数据的线程本地存储特别感兴趣。)大多数其他现代开发环境都在语言或框架级别为其提供了一种或多种机制。 线程本地存储解决了哪些问题,或者与创建独立对象实例以包含线程本地数据的标准的面向对象的习语相比,线程本地存储提供了哪

  • localStorage 本地存储 存储针对QQ帐号隔离 数据存储于本地文件中。游戏结束后不会被删除 函数 key( index) 获取对应索引的key 手q 版本7.8.5 参数 参数名 类型 说明 index number 索引值 返回值 类型 说明 string 说明 示例 var stringKey = BK.localStorage.key(0); getItem( key) 获取ke

  • 本地存储提供了localstore和sessionstore两个类。localstore使用本地文件持久化数据,因此该类存储的数据不会失效。sessionstore存储的数据会在插件运行结束时清空,因此有效期为插件运行期。localstore和sessionstore的API接口一致。 set QN.localstore.set({ query: { key: 'name'