比如说 JAVA 中的单例模式实现的时候, 双重锁的实现方式中必须要加上 volatile 才能保证一定是线程安全的。 那么 golang 中呢,并没有 volatile 关键字,没办法保证内存屏障的话该如何保证线程安全呢。
哦哦,后来想了想是不是 golang 这样子的编译型语言中, singleton = &test{} 这样子的时候,后面 new 的 test 的底部非原子性操作是不会发生重排序的,也就没有 JAVA 中的问题了。 毕竟那个问题应该是 JVM 的优化所带进来的,这里还是想像老师求证一下我的猜测。 (自己是个非科班的前端,之前只懂 JS,没接触过 C/C++,这方面薄弱了些)。