有什么阻止C ++优化全局变量的东西吗?

时间:2017-03-09 06:06:27

标签: 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 个答案:

答案 0 :(得分:3)

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

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

选择一个:

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

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