线程本地存储
回答
不,线程本地存储的全部意义就在于它的当地的话题 - 如果你在不同的线程访问相同的插槽,你会得到价值该线程,而不是另一种。
如果您需要在线程之间共享状态,请勿使用线程本地存储。
但拥有TLS插槽的阵列是全球性的,我不知道我明白这是怎么回事?或者我弄错了...... – 2010-06-26 13:04:10
@Tony - 操作系统负责确保插槽指向不同内存的不同线程,如选择答案所示。即使TLS变量是全局变量,实际使用的值对于每个线程都是不同的。 – mdma 2010-06-26 15:20:56
@JonSkeet然后任何线程可以分配TLS插槽? – onmyway133 2013-07-25 09:22:14
的术语可以是混乱,因为“时隙”是经常用于存储器位置或一个地方的隐喻。使用TLS时,插槽仅仅是线程私有存储中某个位置的“名称”。在x86/x84上,没有真正的线程本地存储 - 所有内存都是全局的 - 所以根据正在访问的线程,系统负责将TLS中的每个“插槽”映射到不同的实际内存位置。来自同一线程的针对一个插槽的请求导致相同的存储器位置 - 从不同线程访问相同的插槽导致不同的存储器位置。
因为每个线程都看到不同的数据,所以不需要同步。除非你选择在两个不同线程的TLS中存储相同的对象,那么这是一个不同的故事,但这是一个非常人为的案例 - 共享不是因为TLS。
- 1. 线程本地存储功能
- 2. 访问线程本地存储
- 3. 线程本地存储工作原理
- 4. 关于TBB线程本地存储
- 5. .Net:逻辑线程和线程本地存储?
- 6. 线程本地,类实例本地存储?
- 7. 本地存储的教程?
- 8. 其他地方使用线程本地存储?
- 9. 副本列表,池,线程设置(1:N)的/每个线程本地存储
- 10. 如何释放线程本地存储的堆内存
- 11. 线程本地存储内存使用情况
- 12. 离线缓存和本地存储的iOS Web应用程序
- 13. 使用__declspec(线程)的线程本地存储在C++/CLI中失败
- 14. Python SocketServer通过线程本地存储将数据传递到主线程
- 15. 我如何使用线程本地存储(TLS)?
- 16. 如何在使用TPL时管理线程本地存储(TLS)?
- 17. 线程本地存储在backgroundworker调用之间是否持久?
- 18. WinRT是否支持线程本地存储功能(Tls *)?
- 19. forkOS似乎无法保留线程的本地存储
- 20. 线程本地存储(TLS) - 编译器错误
- 21. “此目标不支持线程本地存储”,适合#ifdef?
- 22. 内核模式下的线程本地存储?
- 23. 仅限NetBSD的线程本地存储段错误?
- 24. 德尔福班vars有全局或线程本地存储?
- 25. 将本地存储模型保存到本地存储
- 26. 存储地理路线
- 27. Phonegap本地存储
- 28. 本地存储-jquery
- 29. Parallel.ForEach本地存储
- 30. Tabris本地存储
“slot”是什么意思?根据定义,TLS无法从其他线程访问。 – 2010-06-26 12:59:12
@Konrad:有关插槽信息,请参阅Thread.AllocateSlot和Thread.AllocateNamedDataSlot。 – 2010-06-26 13:01:42