当多个线程递增时共享变量的最小和最大可能值

Ket*_*xit 6 multithreading

我有一个全局共享变量,并且由生成的5个线程中的每个线程更新5次.根据我的理解,增量操作由3条指令组成

load  reg, M
inc reg
store reg, M
Run Code Online (Sandbox Code Playgroud)

所以我想问一下,在这种情况下,在5个线程中给定任意交错的最大值和最小值是多少.

所以据我说,最大值将是25(我100%确定它可以超过25),最小值是5.但我不确定最小值.在一些任意交错中它可以小于5吗?任何输入将不胜感激.

/* Global Variable */
int var = 0;

/* Thread  function */
void thread_func()
{
     for(int c = 0; c < 5; c++)
             var++;
}
Run Code Online (Sandbox Code Playgroud)

jtd*_*ubs 16

鉴于您对增量的定义,我同意您的最大值为25.

但是,我认为在以下情况下min可以是2.我已经命名了5个线程A,B,C,D和E.

  1. A加载0
  2. C,D,E运行完成
  3. B经历了5次迭代中的4次.
  4. 增量0到1并存储结果(1).
  5. B加载1
  6. A跑完了
  7. B增加1到2并存储2.