我一直在运行使用双重检查锁定的代码,但我仍然对为什么要使用它感到困惑。
我一开始并不知道双重检查锁定是坏的,当我学会它时,它对我来说放大了这个问题:为什么人们首先要使用它?比较和交换不是更好吗?
if (field == null)
Interlocked.CompareExchange(ref field, newValue, null);
return field;
(我的问题同时适用于 C# 和 Java,尽管上面的代码适用于 C#。)
与原子操作相比,双重检查锁定是否具有某种内在优势?