今天看微软空宣里提到的一道面试题,一下子没反应过来。。毕竟操作系统的知识我好像都上交了x要抽时间看看才行。

题目描述

image-20211223223031554

原理

多个cpu对应多个寄存器。i++并不是原子性的,它的操作分为三步:

  • 从内存中取数放入寄存器
  • 执行++运算
  • 将数写回内存

过程分析

接下来参考文章[1],画图分析一下为2的极端情况

image-20211223225605565

实操[2]

相似题[1:1]

j=100,两个线程j–-,均执行50次,可能值是多少?(0-98)


  1. 面试—i在两个线程分别执行100次,最大值和最小值分别多少_ 爱橙子的OK绷的专栏-CSDN博客_i在两个线程里分别执行100次 ↩︎ ↩︎

  2. 两个线程同时对int a=0进行a++一百次最后的结果可能为多少?_beyond丿灬的博客-CSDN博客 ↩︎