多线程 - 在一个线程中增加整数,在另一个线程中减少

Med*_*ine 1 c++ linux multithreading locking multicore

在一个多线程程序中,2个线程 - 线程1 - 将运行一个循环,增加整数变量1000次然后退出线程2 - 将运行一个循环,减少整数变量1000次然后退出

两个线程都在信号量上等待并且大致同时启动,并且计划在大约相同的时间在不同的核上运行.

两个线程退出后,整数变量的值是否为零?注意:不使用锁定(互斥等)

让我们假设linux和x86架构以及多核硬件.

如果将相同的整数声明为volatile(C++),会发生什么?

Grz*_*man 5

是否易变,你不能指望任何特定的输出(范围[-1000,1000]除外) - 即使单个并发写入也可能破坏增量/减量的结果(即使在CPU级别也不是原子的).


Pet*_*ker 5

如果多个线程同时修改相同的内存位置,则程序具有数据争用并且效果未定义.结果可以是几乎任何东西,假设你得到一个结果.对于像整数类型这样的简单变量,atomics将消除数据争用并提供适当的同步.使用atomic_int(也称为atomic<int>).