На самом деле, приведенный пример может быть безопасным для типов.Кроме того, это может быть даже достаточно хорошей идеей.
Если несколько потоков выполнят нулевую проверку до того, как первый поток записал в _instance (и, возможно, после того, как первый поток записал в _instance, но до второгоЦП потока получил новое значение, загруженное в его кэш), затем второй (и третий, и четвертый ...) поток создаст новый экземпляр и запишет это в _instance.
На языке сборки мусораэто просто означает, что на короткое время несколько потоков будут иметь собственную версию _instance, но достаточно скоро они выйдут из области видимости и получат право на сборку мусора.
Теперь это расточительно, нона самом деле это проблема или нет, зависит от того, насколько дорого стоит создание нового экземпляра и есть ли какие-либо негативные последствия наличия более одного экземпляра.Очень часто обратная сторона такого ненужного дублирования объектов экземпляра довольно незначительна, и в этом случае она может быть менее отрицательной, чем стоимость блокировки (блокировка относительно дешевая, но не бесплатная, ожидание блокировки может быть довольно дорогим, и внекоторые случаи (тупик - самый экстремальный случай), или даже CASsing.Даже если это дороже, на самом деле это может быть небезопасно.
Поскольку мы не можем судить, так ли это в приведенном выше примере, на самом деле мы не знаем, является ли он потокобезопасным или нет.
Скорее всего, создание статической конструкции - это путь.