Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 2976|Відповідь: 2

[Джерело] Як Lazy у C# зберігає теми в безпеці

[Копіювати посилання]
Опубліковано 02.07.2023 21:41:55 | | |
Після .NET 4.0 у .NET Framework був запропонований безпечний тип лінивого завантаженняЛінивий
Lazy може працювати в багатопотоковому середовищі, що гарантованоGetValueФункція виконується лише один раз, тобто реалізуєтьсяРежим синглтона

Раніше ми використовували квадратичні замки судження для реалізації одиночних патернів або для використання статичних функцій ініціалізації класів
У Lazy Type цей процес спрощується, а продуктивність краща

Коли створено Lazy, можна вказати режим встановлення потоку, наразі є два режими,Лише для публікаціїВисловлення та публікація

Режим PublicationOnly


1. Запустіть функцію ініціалізації та увімкніть її у всерединуЯщиктип, розв'язати проблему судження нульової вартості, якщо справа створена, вона поверне null,Процес є незахищеним потоком

2. Визначити, чи m_boxed порожній, m_boxed — поле, збережене за значенням; якщо воно дорівнює порожнім, воно встановлюється у коробку, цей метод може забезпечити атомарність,Процес є безпечним для потоків

3. Якщо CreateValue повертає порожній, це означає, що інші потоки вже створили екземпляри, а потім встановіть на вже створені екземпляри

4. Позначте метод ініціалізації як ініціалізований, що зазвичай відбувається при одночасному виконанні, і запустіть CreateValue кілька разів


Лише для публікаціїрежим використовується на основіInterlocked.CompareExchange, цей клас містить атомарні методиCAS (Порівняння та обмін)

CAS реалізується за допомогою атомарних інструкцій, наданих процесором, і різні версії виконання можуть мати різні реалізації
Взаблокована специфічна реалізація У рідному методі зацікавлені друзі можуть перевірити конкретну реалізацію через код coreclr/jvm

У цьому режимі,Функція синглтону може виконувати кілька разів, але в кінцевому підсумку гарантовано буде отримано лише один екземпляр

Режим ExcutionAndPublication

Висловлення та публікаціярежим, що використовується в режиміВолатил+МоніторМоніторТак і єзамокРеалізація цього оператора, реалізація Monitor у рідному коді, є потужним блокуванням

МоніторПідтримуються режим сну черги та потоків, що дозволяє забезпечити виконання всього блоку методу в однопоточному стані


Оригінальне посилання:Вхід за гіперпосиланням видно.




Попередній:ASP.NET різниця між ThreadStatic, CallContext і HttpContext
Наступний:SQL Server запитує поточну кількість підключень до бази даних
 Орендодавець| Опубліковано 02.07.2023 21:42:16 |
 Орендодавець| Опубліковано 04.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