След .NET 4.0, в .NET Framework беше предоставен сигурен тип за мързеливо зарежданеМързелив Lazy може да работи в многопоточна среда, гарантираноGetValueФункцията се изпълнява само веднъж, като по този начин се реализираСингълтън режим
В миналото използвахме квадратични заключения за преценка за реализиране на singleton patterns или за използване на статични функции за инициализация на класове При мързеливия тип този процес е опростен и производителността е по-добра
Когато се създаде Lazy, можете да зададете режима на инсталация на нишки, в момента има два режима,Само за публикации,Ексклюзия и публикация
Режим PublicationOnly
1. Стартирайте функцията за инициализация и я поставете в кутия вътрешенКутиятип, реши проблема с нулевата стойностна преценка, ако случаят е създаден, той ще върне null,Процесът е несигурен по нишки
2. Определи дали m_boxed е празен, m_boxed е полето, запазено чрез стойност; ако е равно на празно, то се задава в кутия, този метод може да гарантира атомарност,Процесът е безопасен за нишки
3. Ако CreateValue върне празни, това означава, че други нишки вече са създали инстанции, след което са зададени на вече създадени инстанции
4. Маркирайте метода на инициализация като инициализиран, което обикновено се случва при конкурентно изпълнение, и изпълнете CreateValue няколко пъти
Само за публикациирежимът се използва въз основа наInterlocked.CompareExchange, този клас съдържа атомарни методиCAS (Сравнение и размяна)
CAS се реализира чрез атомарни инструкции, предоставени от процесора, а различните версии на изпълнение могат да имат различни реализации Интерлокирана специфична имплементация В нативния метод заинтересовани приятели могат да проверят конкретната имплементация чрез coreclr/jvm код
В този режим,Функция с сингълтон може да се изпълнява многократно, но в крайна сметка е гарантирано, че ще бъде получен само един екземпляр
Режим на екскюция и публикация
Ексклюзия и публикациярежим, използван в режимаВолатил+Монитор,МониторТова еключалкаИмплементацията на изявлението, Monitor имплементацията в родния код, е тежка заключваща сила
МониторПоддържат се опашка и сън на нишки, което може да гарантира, че целият метод блок се изпълнява в еднонишково състояние
Оригинален линк:Входът към хиперлинк е видим. |