volatile能保证有序性吗?

volatile能保证有序性
多线程通过抢占时间片来执行自己的代码体,所以我们会感觉到线程是同时执行完的,除了引入了时间片以外,由于处理器优化和指令重排等,CPU还可能对输入代码进行乱序执行,比如我们拿到数据要执行写库,查询,删除这三个操作,这就会可能要涉及到有序性的问题了。

volatile可以禁止指令指令重排序,这就保证了代码的程序会严格按照代码的先后顺序执行。这就保证了有序性。
被volatile修饰的变量的操作,会严格按照代码顺序执行,就是说当代码执行到volatile修饰的变量时,其前面的代码一定执行完毕,后面的代码一定没有执行。

volatile关键字禁止指令重排序有两层意思:
  1)当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行;

2)在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。

发布了59 篇原创文章 · 获赞 15 · 访问量 556

猜你喜欢

转载自blog.csdn.net/qq_45287265/article/details/105055204