我已将计数初始化为
count = 15;
如果我有两个这样的线程:
thread_1(){
count = 0;
x = count;
count = x;
}
和
thread_2(){
y = count;
count = y;
count = 0;
}
在没有计数同步的情况下,在运行两个线程之后,count可以最终为15。
如果我将count变量声明为原子,运行两个线程后计数总是为0?
答案 0 :(得分:5)
无;程序可以像
一样执行count = 15
(全局初始化)y = count
(thread2)count = 0
(thread1)count = y
(thread2 - > 15)x = count
(thread1)count = 0
(thread2)count = x
(thread1 - > 15)答案 1 :(得分:0)
没有。首先,您的操作可能已经是原子操作,因为它们会同时更改client
。 C ++原子实际上适用于像count
这样的东西,你需要加载count = count + 5
,向它添加5,并将其存储回来。相反,你需要的是使每个部分都是原子的,为此你可以使用count
,如下所示:
std::mutex