编程语言
首页 > 编程语言> > 【并发编程】-01-可见性、原子性、有序性

【并发编程】-01-可见性、原子性、有序性

作者:互联网

01-可见性、原子性、有序性

源头之一:缓存导致的可见性问题

可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性.

源头之二:线程切换带来的原子性问题

例如:count += 1,在cpu指令级别上

我们把一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。CPU 能保证的原子操作是 CPU 指令级别的,而不是高级语言的操作符。

源头之三:编译优化带来的有序性问题

经典的例子:


public class Singleton {
  static Singleton instance;
  static Singleton getInstance(){
    if (instance == null) {
      synchronized(Singleton.class) {
        if (instance == null)
          instance = new Singleton();
        }
    }
    return instance;
  }
}

出现的问题:new 操作上,:

但是实际上优化后的执行路径却是这样的:

标签:Singleton,01,编程,instance,指令,内存,有序性,CPU
来源: https://www.cnblogs.com/shix0909/p/15072395.html