Med*_*ine 1 c++ linux multithreading locking multicore
在一个多线程程序中,2个线程 - 线程1 - 将运行一个循环,增加整数变量1000次然后退出线程2 - 将运行一个循环,减少整数变量1000次然后退出
两个线程都在信号量上等待并且大致同时启动,并且计划在大约相同的时间在不同的核上运行.
两个线程退出后,整数变量的值是否为零?注意:不使用锁定(互斥等)
让我们假设linux和x86架构以及多核硬件.
如果将相同的整数声明为volatile(C++),会发生什么?
如果多个线程同时修改相同的内存位置,则程序具有数据争用并且效果未定义.结果可以是几乎任何东西,假设你得到一个结果.对于像整数类型这样的简单变量,atomics将消除数据争用并提供适当的同步.使用atomic_int(也称为atomic<int>).