Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 2976|Отговор: 2

[Източник] Как Lazy in C# пази нишките в безопасност

[Копирай линк]
Публикувано в 2.07.2023 г. 21:41:55 ч. | | |
След .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 имплементацията в родния код, е тежка заключваща сила

МониторПоддържат се опашка и сън на нишки, което може да гарантира, че целият метод блок се изпълнява в еднонишково състояние


Оригинален линк:Входът към хиперлинк е видим.




Предишен:ASP.NET разликата между ThreadStatic, CallContext и HttpContext
Следващ:SQL Server прави запитвания за текущия брой връзки към базата данни
 Хазяин| Публикувано в 2.07.2023 г. 21:42:16 ч. |
 Хазяин| Публикувано в 4.07.2023 г. 19:19:45 ч. |
C# оптимизация на производителността: Lazy инициализира Lazy<T> с забавяне
https://www.itsvse.com/thread-7700-1-1.html
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com