单例模式 - 为什么我们需要检查两次可变变量的初始化?

时间:2012-05-07 09:57:24

标签: synchronization thread-safety critical-section

只有当条件uniqueInstance == null设置为true时,线程才会输入同步代码,那么需要在临界区内再次检查它是什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

因为在检查和同步调用之间你可能被另一个获取信号量的进程打断,写入单例,然后退出。除非您再次检查,否则您可能会覆盖其他进程已初始化的值。

另一方面,如果使整个方法同步,则​​每次调用单例而不是第一次调用时都需要支付同步成本。最好两次检查。