现在的位置: 首页 > 综合 > 正文

i++ 不是原子操作

2018年03月15日 ⁄ 综合 ⁄ 共 355字 ⁄ 字号 评论关闭

1. 什么是操作系统的“原子操作”

     原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断,分为两种情况(两种都应该满足)

     (1) 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。

      (2) 在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。

 

2.   面试的时候经常问的一道题目是i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?(2 -200

       i++只需要执行一条指令,并不能保证多个线程i++,操作同一个i,可以得到正确的结果。因为还有寄存器的因素,多个cpu对应多个寄存器。每次要先把i从内存复制到寄存器,然后++,然后再把i复制到内存中,这需要至少3步。从这个意义上讲,说i++是原子的并不对。

【上篇】
【下篇】

抱歉!评论已关闭.