二重チェックのロックを使用するコードに出くわし続けていますが、なぜそれが使用されているのか、いまだに混乱しています。
私は最初、ダブルチェック ロックが壊れていることを知りませんでした。それを知ったとき、この疑問が拡大しました。そもそもなぜ人々はそれを使用するのでしょうか? コンペア&スワップの方がいいんじゃない?
if (field == null)
Interlocked.CompareExchange(ref field, newValue, null);
return field;
(上記のコードは C# 用ですが、私の質問は C# と Java の両方に当てはまります。)
二重チェックのロックには、アトミック操作と比較して、ある種の固有の利点がありますか?