原子变量c ++

时间:2018-02-11 21:10:01

标签: c++ multithreading

我已将计数初始化为

count = 15;

如果我有两个这样的线程:

thread_1(){
    count = 0;
    x = count;
    count = x;
}

thread_2(){
    y = count;
    count = y;
    count = 0;
}

在没有计数同步的情况下,在运行两个线程之后,count可以最终为15。

如果我将count变量声明为原子,运行两个线程后计数总是为0?

2 个答案:

答案 0 :(得分:5)

无;程序可以像

一样执行
  1. count = 15(全局初始化)
  2. y = count(thread2)
  3. count = 0(thread1)
  4. count = y(thread2 - > 15)
  5. x = count(thread1)
  6. count = 0(thread2)
  7. count = x(thread1 - > 15)

答案 1 :(得分:0)

没有。首先,您的操作可能已经是原子操作,因为它们会同时更改client。 C ++原子实际上适用于像count这样的东西,你需要加载count = count + 5,向它添加5,并将其存储回来。相反,你需要的是使每个部分都是原子的,为此你可以使用count,如下所示:

std::mutex