i++大致分为三个步骤:
1、从内存读出i的值到寄存器
2、操作寄存器加1
3、将寄存器值写到i内存
多个线程去操作同一个全局变量的时候,可能某个线程在第二步的时候切换到另一个线程,这样就导致少加了。比如线程A 在i=1 的时候在第二步,这个时候寄存器加1值为2,在这个时候切换到线程B ,由于线程A还没有把2写到i里面,使用B读出来还是1,自增写到i里面,i为2,在切换到线程A,线程A将寄存器里面的2写到i,这样就少加了一次。
多线程程序设计的常见坑
最新推荐文章于 2024-05-25 18:36:52 发布