gpt4 book ai didi

C++ - thread_local 变量存储在哪里?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:02 26 4
gpt4 key购买 nike

我想了解 thread_local 限定符究竟是如何工作的,以及实际变量存储在哪里?这是在 C++ 上。

假设我有一个包含多个成员变量的类。该类的对象在堆上实例化,该对象在 2 个线程之间共享。使用适当的锁定机制来确保两个线程不会同时踩踏一个成员变量。

线程需要跟踪少数线程特定项目。所以我想在与类声明相同的头文件中创建一个 thread_local 变量。据我了解,两个线程都将获得该变量的自己的拷贝,对吗?线程局部变量究竟存放在内存的什么位置?如果是数据段,在执行过程中如何准确地获取正确的变量?

最佳答案

<强>1。据我了解,两个线程都将获得自己的此变量拷贝,对吗?
是的。每个线程都有自己的 thread_local 变量拷贝。
<强>2。线程局部变量究竟存放在内存的什么位置?如果是数据段,在执行过程中如何准确地获取正确的变量?
thread_local 是线程本地存储概念的实现。 TLS 被实现为每个线程对象的插槽表。每个线程都有自己的表拷贝。例如,在 TLS 的 Windows 实现中,该表位于线程的线程信息 block 中。当一个全局/静态变量被声明为 thread_local 时,它将与每个线程的表槽在相同的偏移量处相关联。当线程访问 thread_local 变量然后使用当前线程上下文时,线程自己的与此线程对象内的表槽关联的变量拷贝将被访问。请检查此链接以获取有关 TLS 实现的更多详细信息。 https://en.wikipedia.org/wiki/Thread-local_storage

关于C++ - thread_local 变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com