GCC 中函数静态变量是线程安全的吗?

2023-11-22

在示例代码中

void foo()
{
  static Bar b;
  ...
}

编译为GCC是否保证b将以线程安全的方式创建和初始化?

在 gcc 的手册页中,找到了-fno-线程安全-静态命令行选项:

不要发出额外的代码来使用 C++ ABI 中指定的例程 本地线程安全初始化 静力学。您可以使用此选项 稍微减少代码大小 不需要是线程安全的。

  1. 这是否意味着 GCC 默认情况下本地静态是线程安全的?因此没有理由进行明确的保护,例如和pthread_mutex_lock/unlock ?

  2. 如何编写可移植代码 - 如何检查编译器是否会添加其防护?还是关闭GCC的这个功能比较好?


  1. 不,这意味着初始化本地的statics 是线程安全的。

  2. 您肯定希望启用此功能。本地的线程安全初始化statics 非常重要。如果您通常需要对本地进行线程安全访问static那么您需要自己添加适当的防护装置。

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

GCC 中函数静态变量是线程安全的吗? 的相关文章

随机推荐

  • 使用 PHP 将文件从一台服务器移动到另一台服务器的最佳方法是什么?

    我想设置一个运行 PHP 脚本的 CRON 该脚本又将 XML 文件 保存非敏感信息 从一台服务器移动到另一台服务器 我已获得正确的用户名 密码 并且想要使用 SFTP 协议 这些作业将每天运行 有可能一台服务器是 Linux 另一台服务器
  • iOS:如何使用 Google Drive sdk 库将文件上传到特定的 Google Drive 文件夹

    我将 Google Drive sdk 与我的 iOS 应用程序集成 但我不知道如何将文件上传到 Google 驱动器特定文件夹 这里的代码用于上传文件 但这是将文件上传到我的谷歌驱动器根文件夹 有人分享一个代码来将文件上传到谷歌驱动器特定
  • 使用 Heroku 的 Git 子模块

    问题 我在 Heroku 上有一个 Rails 3 1 应用程序 它将很快需要一堆 第 3 方 子模块 其中一些有子模块 不幸的是 Heroku 缺乏子模块支持 Heroku 网站上的一项建议是将子模块的内容移至主存储库中 here 第一次
  • pip freeze 列出已卸载的软件包

    在 OS X 10 6 8 上 我使用卸载了一个包 至少 pip 告诉我是这样 sudo pip uninstall pkg name 但当我这样做时包裹仍然出现 pip freeze 我再次尝试执行上面的卸载命令 pip 告诉我该软件包尚
  • 将输入文件替换为表单中我自己的按钮

    基本上我想隐藏输入文件并使用按钮来选择表单中的文件 如果我使用
  • onchange 事件是否传播?

    我使用事件委托来侦听 DOM 中较低层的事件 但它不适用于选择框上的 onchange 事件 onchange 事件是在 DOM 中传播还是冒泡 谷歌搜索未能找到确凿的答案 根据规格 change submit reset应该起泡并且foc
  • 查询Android数据库是否存在!

    我已经为我的 android 应用程序创建了一个数据库 其中包含静态数据并且不需要更新 删除功能 因此当应用程序启动时 我想检查数据库是否存在 如果不存在则执行我的 dbAdapter 类 我知道它是一个简单的 if 语句 但我只是想知道查
  • 您建议使用哪个 CPAN 模块将 HTML 转换为纯文本?

    您建议使用哪个 CPAN 模块将 HTML 转换为格式化纯文本 一项严格的要求是该模块必须处理 Unicode 字符 I like HTML 格式文本 and HTML FormatText WithLinks
  • Angular 2 - 如何为动态加载的组件设置 id 属性

    我在用DynamicComponentLoader加载子组件并生成以下 html
  • 在 std::map 和 std::unordered_map 之间进行选择[重复]

    这个问题在这里已经有答案了 现在std有一个真正的哈希映射unordered map 为什么 或何时 我仍然想使用旧的map over unordered map在它实际存在的系统上 是否有任何我无法立即看到的明显情况 As 已经提到过 m
  • R tm removeWords函数不删除单词

    我试图从我构建的语料库中删除一些单词 但它似乎不起作用 我首先遍历所有内容并创建一个数据框 按频率顺序列出我的单词 我使用此列表来识别我不感兴趣的单词 然后尝试创建一个删除单词的新列表 但是 这些词仍然保留在我的数据集中 我想知道我做错了什
  • 在 JAVA 中使用 JSOUP 从 HTML 中提取 CSS 样式

    任何人都可以帮助使用 Java 中的 Jsoup 从 HTML 中提取 CSS 样式 例如在下面的 html 中我想提取 ft00 和 ft01 div style width 931 height 1243 div
  • WPF:滚动项目控制内容固定标题

    是否可以使用 WPF 的 ItemsControl 执行类似的操作 Demo 我正在尝试冻结 GroupedItems 而不是 GridView 列 资源
  • 如何获取小部件当前的 x 和 y 坐标?

    我目前正在编写一个关于游戏 4 in a row 的游戏项目 为了制作图片小部件磁盘落在列中的动画 我一直在考虑创建一个 while 循环 如下所示 while widgetx and widgety 在空白部分将有我需要获得的值 我的问题
  • WebRTC 永远不会在 IceCandidate 上触发

    我开始使用 WebRTC 进行开发 但那东西从来没有给我提供 ICE 候选人 我设置了一切 我正在交换描述和东西 我还在那里缩小了一个超级丑陋的功能 以确保一切都正确运行 一个接一个 两者的信令状态都是稳定的 onError从未被触发 如预
  • Git:从存储库自动拉取?

    有没有什么方法可以设置 git 使其侦听来自远程存储库的更新 并在发生变化时拉取 用例是我想使用 git 部署一个 Web 应用程序 这样我就可以对已部署的应用程序进行版本控制 但想将 中央 git 存储库放在 Github 上而不是 We
  • 将 int 转换为 16 位无符号短整型

    我想在 Python 中将整数修剪为 16 位字 无符号短整型 像下面这样的东西不起作用 word array H word insert 0 0x19c6acc6 Use ctypes c ushort gt gt gt import c
  • 为什么 Android 教程中的大多数字段(类成员)都以“m”开头?

    我知道驼峰规则 但我对这个 m 规则感到困惑 它代表什么 我是一名 PHP 开发人员 我们 使用变量的首字母作为类型指示 例如 b 代表布尔值 i 代表整数等等 m 是 Java 的东西吗 它代表移动吗 混合 该表示法来自 AOSP And
  • 如何迭代 PriorityQueue?

    for Event e pq 不按优先级顺序迭代 while pq isEmpty Event e pq poll 这有效但清空了队列 你不能遍历一个Priority Queue由于底层实现的原因 我认为它是Java中的最小堆 因此按该顺序
  • GCC 中函数静态变量是线程安全的吗?

    在示例代码中 void foo static Bar b 编译为GCC是否保证b将以线程安全的方式创建和初始化 在 gcc 的手册页中 找到了 fno 线程安全 静态命令行选项 不要发出额外的代码来使用 C ABI 中指定的例程 本地线程安