【发布时间】:2023-04-08 20:59:02
【问题描述】:
我正在查看有关线程本地存储的文档,但我认为它写得不好。
https://docs.microsoft.com/en-us/windows/win32/procthread/thread-local-storage
似乎他们编写文档的方式是零星的,他们将提供一个发生的事件,然后下一句他们将提供有关在此事件之前需要发生什么的信息。然后另一个事件发生了,他们会解释在这个事件之前需要发生什么。但顺序事件的链条尚不清楚。通常他们会在一个句子中提供一个对象,然后下一个句子谈论另一个对象,同时透露有关该对象的更多细节。
但据我了解,有一个全局索引,其中索引具有关联的数据,一个线程分配索引,然后其他线程可以访问它。当创建线程时,会生成一个称为 TLS 槽的 LPVOID 值数组。然后将与索引关联的数据存储在此数组中。
我的困惑在于最后一部分,它说线程分配内存块,然后将指向这些内存块的指针存储在 LPVOID TLS 插槽中。并且指向内存块的指针是从 TLS 插槽中检索的,同时存储在局部变量中。
我的问题是 TLS 插槽中究竟存储了哪些值、内存地址或实际数据值?如果是内存地址指针,我假设这些地址被访问以获取存储在内存块中的值。
分配 2 个内存空间是否也正确,一个用于 LPVOID 数组值,另一个用于索引的内存空间块?它说如果使用大量索引和LPVOID数组,最好分配一个单独的内存空间以避免占用TLS插槽,这就是内存块所指的,数据存储在内存块中,地址存储在插槽中以避免插槽中的数据过载?
阅读文档就像一个难题,如果有人可以提供帮助,我将不胜感激。我已经展示了他们提供的图解结构的图像。
【问题讨论】:
标签: c++ multithreading process