c++ - 将atomic<>定义为函数内的静态变量

标签 c++ c++11

C++11 要求函数内的静态变量在函数第一次运行时以原子方式初始化。有效地做到这一点的唯一方法是双重检查锁定,以始终防止昂贵的互斥锁。
我只是需要在函数内有一个静态原子。如果这样的原子通过双重检查锁定以原子方式初始化,那就没有意义了。相反,它应该像另一个静态初始化的非常量 native 变量一样处理。
我检查了Windows下使用VC++和Intel C++以及Linux下使用clang++和g++生成的代码,所有生成的代码都符合我的预期。但这真的可靠吗?并且按照标准规定,原子应该独立于其他对象进行处理吗?

最佳答案

std::atomic 的默认构造函数是 constexpr,尽管在​​ C++20 之前这是因为它很简单并且对象尚无法使用。这意味着不需要动态初始化,这与标准表明这是有效的一样。

关于c++ - 将atomic<>定义为函数内的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72238929/

相关文章:

c++ - 将传递的参数限制为字符串文字

c++ - 使用 reinterpret_cast 将数据从 std::vector<double> reshape 为指定维度的 double**

c++ - 通过调整窗口大小或移动窗口,使用第二个线程快速更新 GUI 窗口会崩溃

c++ - 从输入文件中读取多行

c++ - 当我创建 C++ 项目时,Visual Studio 使我的项目成为 Java

c++ - 将共享指针与在另一个函数中分配的内存一起使用

c++ - 当 C++11 应用程序使用非 C++11 库时返回值损坏

c++ - 启用 openmp 时出错 - "ld: library not found for -lgomp"和 Clang 错误

c# - 请告诉我一个为委托(delegate)(或)函数指针显示 `need` 的情况

c++ - 状态机实现中type_index的使用、销毁、同步