认识指令重排序,
1,如上面的例子,假如线程A里面的有两行代码flag=true,a=1,现在重排序成这种规则了,
现在假如线程B来读取数据了,这个时候由于flag=true先执行了,a=1还没有执行,这个时候就会出现,虽然读取的时候flag位true但是现在a=1.这个就是指令的重排序现象。
如何避免线程的重排序呢。
加锁,现在即使线程重排序了,但是现在因为有锁的存在,这个时候是不会有任何问题的。
什么时候是不可以重排序的
如以上的例子,假如两行语句之间有串行的关系就是不可以重排序的
比如上面的例子,说的直白一一点就是有逻辑关系的两行代码是不可重排序的。