单例模式 - 早期绑定(涉及静态变量)是否减少了对互斥锁的需求?

Aqu*_*irl 11 c++ java singleton design-patterns thread-safety

他们说早期绑定解决了同步问题.我无法理解"如何".这对Java来说是特殊的还是同样适用于C++?

那么,使用这种方法我们实际上不需要互斥锁吗?

在此输入图像描述

Dav*_*ess 11

JVM确保在允许通过其他线程对其进行任何访问之前完全加载每个类.这意味着所有静态变量(包括uniqueInstance上面的变量)在完全实例化之前都可以被访问.这特定于Java,意味着您不需要同步来保护实例的发布.


Bra*_*ady 3

我认为他们指的是在启动/创建任何线程之前创建 Singleton 实例,从而减轻创建时同步的需要。

编辑:添加有关 C++ 和静态变量的信息

在 C++ 中,静态变量也在执行之前初始化,就像 David Harkness 在 Java 中提到的那样。C++ 中的一个问题可能是在嵌入式环境中,在系统初始化之后才能执行对 malloc/new 的调用,在这种情况下,使用 Singleton 静态初始化程序可能会出现问题。