C++11 thread_local 变量自动静态吗?

2023-11-22

这两个代码段有区别吗:

void f() {
    thread_local vector<int> V;
    V.clear();
    ... // use V as a temporary variable
}

and

void f() {
    static thread_local vector<int> V;
    V.clear();
    ... // use V as a temporary variable
}

背景故事:最初我有一个静态向量V(用于保存一些中间值,每次进入函数时它都会被清除)和一个单线程程序。我想将程序变成多线程程序,所以我必须以某种方式摆脱这个静态修饰符。我的想法是将每个 static 都变成 thread_local 而不用担心其他任何事情?这种方法会适得其反吗?


根据C++标准

当 thread_local 应用于块作用域的变量时 存储类说明符 static是暗示的如果没有出现 明确地

所以这意味着这个定义

void f() {
    thread_local vector<int> V;
    V.clear();
    ... // use V as a temporary variable
}

相当于

void f() {
    static thread_local vector<int> V;
    V.clear();
    ... // use V as a temporary variable
}

然而,静态变量是not与 thread_local 变量相同。

1 所有使用thread_local关键字声明的变量都具有线程 储存期限。这些实体的存储应持续至 创建它们的线程的持续时间。有一个明显的 每个线程的对象或引用,并使用声明的名称引用 与当前线程关联的实体

为了区分这些变量,标准引入了一个新术语线程存储时长以及静态存储持续时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 thread_local 变量自动静态吗? 的相关文章

随机推荐

  • 我如何使用 android 的phonegap 调用网络服务

    如何从我的 PhoneGap 应用程序发起 Web 服务调用 我发现了两个 javascript 库 一个来自 IBM 另一个来自 IvanWebServicehttp wiki phonegap com w page 43725416 S
  • 从后台工作线程修改 Qt GUI

    我在 Qt 中工作 当我按下 GO 按钮时 我需要不断地将包发送到网络并使用我收到的信息修改界面 问题是我有一个while 1 在按钮中 因此按钮永远不会完成 因此界面永远不会更新 我想在按钮中创建一个线程并将while 那里有代码 我的问
  • Git 推送到远程存储库上的特定文件夹

    如何推送到远程存储库中的特定文件夹 我的本地 C 驱动器上有以下结构 myfolder git folder1 folder2 folder3 folder4 gitignore 我执行了git init命令在此文件夹中 之后我做了git
  • C:数据结构对齐

    我正在处理结构 并且有几个关于它们的问题 据我了解 结构变量将按顺序放置在内存中 块 字 的长度取决于机器架构 32 位 4 字节 64 位 8 字节 假设我们有 2 个数据结构 struct ST1 char c1 short s cha
  • Java:如何原子地替换映射中的所有值?

    我在多线程环境中有一个有状态 bean 它将其状态保存在映射中 现在我需要一种方法来在一个原子操作中替换该映射的所有值 public final class StatefulBean private final Map
  • WinAPI 和 UTF-8 支持

    关于 UTF 8 支持和各种 Win32 API 的快速问题 在典型的C MFC项目中 MessageBox 是否可以显示UTF 8编码的字符串 谢谢 安德鲁 快速回答 不 更长的答案 如果字符串仅包含常规 ANSI 字符 例如美国英语 则
  • MS Access 中多值字段的替代方案

    相关问题 多值字段是个好主意吗 我知道多值字段类似于多对多关系 在 MS Access 应用程序中替换多值字段的最佳方法是什么 我有一个具有多值字段的应用程序 我不确定如何消除这些并以单值字段的形式实现完全相同的逻辑 当我想将多值关系转变为
  • 在 java.util.logginglogging.properties 文件中,“handlers”和“.handlers”之间有什么区别?

    在LogManager的文档中 Handlers属性的设置如下 财产 处理者 这定义了空格或逗号分隔 要加载和注册的处理程序类的类名列表 根 Logger 上的处理程序 名为 的 Logger 属性 handlers 这定义了一个空格或逗号
  • 从 SqlDependency 获取数据

    我有一个表和一个正在等待新插入的 SqlDependency OnChange 根据我的需要触发 但我不明白是否可以获得导致数据库更改的行 SqlDependency sql命令 SqlCommand cmd new SqlCommand
  • 我的 ASP.NET App_code 更改没有被拾取(或被缓存??)

    帮助 我在 根级别 App Code 目录下有一个 cs 文件 用于检索所请求 URL 的正确模板 它链接到我们自己的内容管理数据库 最初 它工作正常 我可以对其进行更改 并且 Web 应用程序可以正常接收它们 然后发生了一些事情 不知道是
  • 无法使用 MPMoviePlayerController 从视频中获取多个图像。操作系统状态-12433

    我正在尝试使用 MPMoviePlayerController 从选定的视频文件中提取多个图像 下面是我写的代码 movie MPMoviePlayerController alloc initWithContentURL info obj
  • “dlsym”的库在哪里

    我收到此链接器错误 system core libacc tests main cpp 42 error undefined reference to dlsym 你能告诉我 ubuntu 9 10 上包含 dlsym 库的库在哪里吗 谢谢
  • CUDA PTX 代码和寄存器内存的混淆

    当我尝试管理内核资源时 我决定研究一下 PTX 但有一些事情我不明白 这是我编写的一个非常简单的内核 global void foo float out float in uint32 t n uint32 t idx blockIdx x
  • 控制 $expand 请求返回的内容

    所以 使用ODataController 如果有人这样做 你可以控制返回的内容 odata Foos 42 Bars 因为您会被叫到FoosController像这样 public IQueryable
  • 将 java.lang.reflect.Method 转换为函数式接口

    很难找到该主题的任何线索 我能找到的只是有关将一个函数接口转换为另一个函数接口的问题以及一些有关 Java 类型转换的文章 不是我要找的 This问题是关于转换lambda Method我想要相反的 转换Method任何功能接口 例如Con
  • 如何禁用 Maven 阻止外部 HTTP 存储库?

    自版本 3 8 1 起 Maven 默认阻止外部 HTTP 存储库 请参阅https maven apache org docs 3 8 1 release notes html 有没有办法禁用它或使存储库免受此规则的约束 我找到了一个解决
  • 如何将tensorflow 2.0估计器模型转换为tensorflow lite?

    我下面的以下代码生成常规张量流模型 但是当我尝试将其转换为张量流精简版时 它不起作用 我遵循了以下文档 https www tensorflow org tutorials estimator linear1https www tensor
  • addGlobalMonitorForEventsMatchingMask 不起作用

    我在获取辅助应用程序 开发案例中的 XCode 来捕获全局 keyDown 事件时遇到问题 我见过很多类似下面的代码示例 但这对我来说在 10 9 4 上不起作用 import
  • 如何将整个图像作为壁纸适合屏幕上

    我正在开发一个应用程序 它从图库中选择一张图像 然后将该图像设置为壁纸 但这里的问题是 只有部分图像设置为壁纸而不是整个图像 但我想将整个图像设置为壁纸 你能告诉我该怎么做吗 这是我的代码 public class Scaleimage e
  • C++11 thread_local 变量自动静态吗?

    这两个代码段有区别吗 void f thread local vector