c++ - 线程本地存储,thread_local关键字是必须的吗?
问题描述
我试图理解这个概念。
是关键字thread_local
还是__declspec(thread)
必须?
在 MSDN 上的Using Thread Local Storage中,为什么变量dwTlsIndex
没有用thread_local
or修饰__declspec(thread)
?
解决方案
dwTlsIndex
它本身不存储在任何线程本地内存中,这就是它没有被标记为thread_local
or的原因__declspec(thread)
。
这些关键字的目的是在每个正在运行的线程中声明给定变量的单独副本。 dwTlsIndex
不打算以这种方式复制。它是一个全局变量,在程序启动时通过 初始化 1 次,TlsAlloc()
然后由所有正在运行的线程平等共享。所以它本身不能存储在线程本地内存中。
每个线程都有自己的本地线程本地内存槽数组。 dwTlsIndex
指定这些数组中给定槽(变量)的索引。存储在线程局部内存中的给定变量的索引对于所有线程都是相同的。通过全局共享dwTlsIndex
,所有线程都知道该变量访问哪个槽。
阅读 Microsoft 的文档,了解有关Thread Local Storage实际工作原理的更多详细信息。您专注于特定的代码示例,而不是关注更大的图景。
推荐阅读
- java - 在for循环中将对象添加到arraylist,但for循环完成后arraylist为空?
- css - @Font-face CSS 规则在 Firefix 68.0.1 中不起作用
- excel - 删除多个图表的图表名称、轴、图例、网格线
- c++ - 矩形()抛出错误,表示没有匹配的函数调用
- r - 根据R中的条件乘以和替换数据框中的值
- git - 使用 Ubuntu 设置 Github SSH 密钥:将密钥提取到 Github,但在推送时仍然要求输入用户名和密码
- android - 如何从edittext获取整数并使用kotlin将它们相乘
- flutter - Flutter - 每个用户的firestore
- javascript - drawImage 将颜色保持在高档,但不保持在低档
- r - 我如何通过在 R 中识别良好的起始值来使用 fitdistrplus 找到适合我的数据的合适分布?