Описание тега double-checked-locking
Из Википедии:
В программной инженерии блокировка с двойной проверкой (также известная как "оптимизация блокировки с двойной проверкой" 1) - это шаблон разработки программного обеспечения, используемый для уменьшения накладных расходов на получение блокировки путем первого тестирования критерия блокировки ("подсказка блокировки") без фактического приобретение замка. Только в том случае, если проверка критерия блокировки указывает, что требуется блокировка, выполняется фактическая логика блокировки.
Шаблон, реализованный в некоторых сочетаниях языка и оборудования, может быть небезопасным. Иногда это можно рассматривать как антипаттерн.[2]
Обычно он используется для уменьшения накладных расходов на блокировку при реализации "ленивой инициализации" в многопоточной среде, особенно как часть шаблона Singleton. Ленивая инициализация позволяет избежать инициализации значения до первого обращения к нему.