重排,可见性,锁

如下几种情况引发指令重排:

不改变单线程执行语义情况下编译器优化重排

对无数据依赖的指令,处理器可进行指令重排(并行执行)

写缓存,无效队列导致的内存数据一致性问题(写缓存只对自己可见)

 

指令重排举例:

早上起来喝茶程序:,两个角色:老板,秘书

秘书动作序列:准备茶叶,烧水-水烧开会发出蜂鸣声

老板动作序列:听到蜂鸣声,泡茶喝.

秘书实际执行:先烧水,烧水同时准备茶叶.

老板泡茶可能出现场景:

水烧开了.发现秘书的茶还没准备好.

水烧开了.秘书的茶已准备好.

解决办法:

秘书先准备好茶才能烧水.

引起问题:效率降低.

posted @ 2020-04-23 17:35  java林森  阅读(125)  评论(0编辑  收藏  举报