Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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 здесь:

Инструкция точно пошлёт сигнал как на Thread 1, так и на Thread 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