gpt4 book ai didi

c++ - C++11 中的 thread_local 是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:38 27 4
gpt4 key购买 nike

我对C++11中thread_local的描述感到困惑。我的理解是,每个线程在函数中都有唯一的局部变量拷贝。所有线程都可以访问全局/静态变量(可能使用锁进行同步访问)。 thread_local 变量对所有线程可见,但只能由定义它们的线程修改?这是对的吗?

最佳答案

线程本地存储持续时间是一个术语,用于指代看似全局或静态存储持续时间(从使用它的函数的角度来看)的数据,但实际上,有一个每个线程复制。

它添加到当前选项:

  • 自动(在 block 或函数期间存在);
  • 静态(在程序持续时间内存在);和
  • 动态(存在于分配和释放之间的堆上)。

线程本地的东西在线程创建时就已经存在,并在线程结束时被处理掉。


例如,考虑一个随机数生成器,其中种子必须在每个线程的基础上进行维护。使用线程本地种子意味着每个线程都获得自己的随机数序列,独立于所有其他线程。

如果你的种子是随机函数中的一个局部变量,它会在你每次调用它时被初始化,每次都给你相同的数字。如果它是全局的,线程将干扰彼此的序列。


另一个例子是 strtok,其中标记化状态存储在线程特定的基础上。这样,单个线程可以确保其他线程不会搞砸它的标记化工作,同时仍然能够在多次调用 strtok 时保持状态 - 这基本上呈现了 strtok_r(线程安全版本)冗余。


然而,另一个 示例类似于errno。您不希望在您的一个调用失败后但在您有机会检查结果之前修改 errno


This site对不同的存储持续时间说明符进行了合理的描述。

关于c++ - C++11 中的 thread_local 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943451/

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