c++ - 是否有什么阻止 C++ 优化全局变量?

标签 c++ winapi

据我所知,C++ 对线程一无所知(我猜是在 C++11 标准之前)。

假设我有以下伪代码:

int i = 0;

function foo()
{
    i++;
    cout << i << endl;
}

int main()
{

    CreateThread(...,foo,...);
    foo();

    Sleep(10000);
    return 0;
}

由于 C++ 编译器对线程一无所知,它只会看到一个线程正在修改 i,因此编译器可以将 i 的值存储在一个寄存器中.现在当程序运行时,这两个线程中的每一个都会有一个代表i的寄存器,其值为0,并且每个线程都会将自己的寄存器递增到1!

我的假设是否正确?有没有办法告诉 C++ 编译器不要优化全局变量(我使用的是 Visual C++ 2010)。

最佳答案

你正在做的是未定义的行为

就像银行交易一样,不允许同时访问一个变量。

选择一个:

  1. std::atomic (C++11) 或编译器特定的内部函数。

  2. std::mutex (C++11) 或其等效的 Windows。

关于c++ - 是否有什么阻止 C++ 优化全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42687942/

相关文章:

c++ - Win32_NetworkAdapter 类为 boolean NetEnabled 返回 NULL;

c++ - 获取当前鼠标坐标

C++ Win32 多行静态标签

c++ - glCreateShader 上的 GLUT 段错误

c++ - 如何覆盖自定义委托(delegate)类的 'paint'函数来绘制QSpinBox

c++ - 失败后继续从流中读取是否可以?

c++ - 在 Win32 桌面应用程序上创建按钮时出错

c++ - 确定确切的头文件

c++ - 错误: Invalid preproccessing directive #i did you mean #if?

c - 如何使用 C 检索当前 Windows 用户登录?