通过两个线程递增的全局变量的最终值

use*_*206 2 c c++ multithreading race-condition

我遇到了这个问题:

给定两个线程和一个全局变量var,两个线程运行相同的代码(C/C++代码):

for(int i=0; i<20; i++)
{
  var++;
}
Run Code Online (Sandbox Code Playgroud)

var线程执行结束时可能的值是什么?

如果每个线程var"正确" 递增- 我猜最大值将是40.

但最低价值呢?如何实施增量操作并实际完成?

注意:在有意增加操作中没有锁定(任何类型)(当然,正确的方法是锁定它 - 问题是出于教育目的).

Bat*_*eba 7

如果var没有一个原子类型,则行为是不确定的.因此,关于可能的最终值范围的问题是不适当的.

如果var是原子类型,那么最终结果就好像线程没有并发运行一样.

  • @hansaplast:是的,这有点像发现圣诞老人的真相.这是一个起始链接.https://software.intel.com/en-us/blogs/2013/01/06/benign-data-races-what-c​​ould-possibly-go-wrong (4认同)