首页 > 解决方案 > 线程本地存储,thread_local关键字是必须的吗?

问题描述

我试图理解这个概念。

是关键字thread_local还是__declspec(thread)必须?

在 MSDN 上的Using Thread Local Storage中,为什么变量dwTlsIndex没有用thread_localor修饰__declspec(thread)

标签: c++windowsmultithreadingthread-local-storage

解决方案


dwTlsIndex它本身不存储在任何线程本地内存中,这就是它没有被标记为thread_localor的原因__declspec(thread)

这些关键字的目的是在每个正在运行的线程中声明给定变量的单独副本dwTlsIndex不打算以这种方式复制。它是一个全局变量,在程序启动时通过 初始化 1 次,TlsAlloc()然后由所有正在运行的线程平等共享。所以它本身不能存储在线程本地内存中。

每个线程都有自己的本地线程本地内存槽数组。 dwTlsIndex指定这些数组中给定槽(变量)的索引。存储在线程局部内存中的给定变量的索引对于所有线程都是相同的。通过全局共享dwTlsIndex,所有线程都知道该变量访问哪个槽。

阅读 Microsoft 的文档,了解有关Thread Local Storage实际工作原理的更多详细信息。您专注于特定的代码示例,而不是关注更大的图景。


推荐阅读