C++多线程,并发处理全局变量i使其++为什么不会出现重复值

如题,代码和输出如下。

在汇编里i++分成捕获i值,寄存器累加,寄存器赋值i 三个步骤。
如果不上锁的话,两个线程并发,其中一个有可能会捕获到一个在另一线程中已经“过去”的i值,所以会出现顺序的颠倒。
但是为什么不会出现两个线程捕获到同一个i值导致输出重复的情况呢。大佬们救救我
#C/C++#
全部评论
自动优化成atomic了? gcc -O0试试看
点赞 回复
分享
发布于 2019-05-12 17:36
样本太小
点赞 回复
分享
发布于 2019-05-12 16:51
联易融
校招火热招聘中
官网直投
怎么可能重复
点赞 回复
分享
发布于 2019-05-12 17:11
会不会因为cout执行时间相对于i++要慢很多,导致线程切换基本上都在cout上了?
点赞 回复
分享
发布于 2019-05-12 17:27
用c++11的多线程库,真的好用
点赞 回复
分享
发布于 2019-05-12 18:55
这样,开两个变量,分别记录不同线程的值,然后再起一个线程去判断两个变量值是不是一样。这样子可以保证数据都在内存上。如果跑了很久,发现有相等的情况,说明不发生重复是因为串行打印导致的
点赞 回复
分享
发布于 2019-05-12 20:12

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务