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

Вид: 24412|Відповідь: 1

[Джерело] Різниця між ManualResetEvent і AutoResetEvent вивчена за допомогою потоків C#

[Копіювати посилання]
Опубліковано 31.05.2018 14:59:47 | | | |
Давайте спочатку обговоримо ManualResetEvent, а під час обговорення я додам трохи матеріалів AutoResetEvent для порівняння:

ManualResetEvent може блокувати один або кілька потоків до отримання сигналу, який повідомляє ManualResetEvent припинити блокування поточного потоку.

Інформація про ManualResetEvent

.net/c# Thread thread Suspend and Resume застарілі рішення
https://www.itsvse.com/thread-4769-1-1.html
(Джерело: Architect_Programmer)


Уявіть, що об'єкт ManualResetEvent має булеву властивість типу IsRelease, яка контролює, чи блокувати поточний потік. Ми можемо встановити цю властивість під час ініціалізації, наприклад ManualResetEvent event=new ManualResetEvent(false); Це означає, що властивість за замовчуванням — блокувати поточний потік.

Приклад коду:



Зверніть увагу на важливу різницю між ManualResetEvent та AutoResetEvent тут:

Інструкція обов'язково надішле сигнал і на нитку 1, і на нитку 2,Авто надсилає сигнал лише одному з них випадково.

Чому один називається ручним, а інший — автоматичним? Я думаю, це питання, яке мають багато людей, і тепер ми розглянемо його питання.

Просто now_manualResetEvent. Set(); Я думаю, що всі розуміють це речення, яке можна розглядати як встановлення властивості IsRelease як істину

_manualResetEvent.WaitOne(); Більше не блокує потік 1 після отримання сигналу. Цінність IsRelease залишається актуальною протягом усього процесу після цього.Якщо

Якщо ви хочете повернути значення IsRelease у false значення, потрібно знову викликати метод _manualResetEvent.Reset().

Якщо це _autoResetEvent.set(), то _autoResetEvent.WaitOne() автоматично встановить значення IsRelease як false.

Ось чому один називається автоматичним, а інший — механічним.



Тестовий код:







Попередній:. Найшвидший компонент відображення об'єктів OOM у .NET — Tiny Mapper — у практиці проєктів
Наступний:C# DEBUG Інформація про налагодження, друк і детальне пояснення виводу
 Орендодавець| Опубліковано 18.12.2024 20:30:44 |
І ManualResetEvent, і AutoResetEvent успадковують зEventWaitHandle, як показано на рисунку нижче:



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

Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com