编发编程中的一个例子-指令重排对资源访问的影响

2020-08-08T01:39:12
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

对线程A来说:

  var context = loadContext();

  inited = true;

  对线程B来说:

  while(!inited){

    sleep(1000);

  }

  doSomethingWithConfit(context);

这里,线程B有可能会获得未初始化的context或未初始化完全的context。因为在线程A中,有可能会发生指令重排,比如在编译器,或jvm运行期,或cpu的指令重排。

解决方法:

  1.synchronized 串行访问

  2.volatile 避免重排序

  3.原子变量

  4.ReentanceLock

  5.CountDownLatch

扫一扫关注公众号添加购物返利助手,领红包
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »
因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合MIP标准。