是否有任何阻止C 优化全局变量的东西



据我所知,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等于。

最新更新