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

Вид: 17115|Ответ: 0

[Связь] Подробное объяснение AutoResetEvent в .net/c#

[Скопировать ссылку]
Опубликовано 20.03.2018 13:19:01 | | |

Понятия, связанные с потоками
1. Синхронизация потоков
Manual ResetEvent
Метод Set() устанавливает состояние в Signaled
Reset(), чтобы установить сигнал на нулевой
WaitOne() блокирует до тех пор, пока не появится сигнал, и если в момент вызова WaitOne есть сигнал, он не будет блокировать
AutoResetEvent
Отличие от ManualResetEvent в том, что AutoResetEvent.WaitOne() автоматически меняет состояние объекта события, то есть состояние события меняется каждый раз при выполнении AutoResetEvent.WaitOne(). Сигнал — > отсутствует; Нет сигнала — у > есть сигнал
example:


  
myResetEven.Set(), который фактически эквивалентен коммутатору, если метод set() не выполняется, следующий waitOne() не сможет дождаться уведомления, чтобы он выполнил, поэтому оператор после waitOne не будет выполнен.
Метод мониторинга
Механизм Wait() Pulse() используется для межпотокового взаимодействия: когда объект издаёт Monitor.Wait(), поток, обращающийся к объекту, остаётся в состоянии ожидания. пока не получит сигнал пробуждения. Monitor.Pulse() используется для передачи сигналов в ожидающий поток.
То есть в критической области между Monitor.Enter() и Monitor.Exit(), чтобы снять блокировку с объекта и заблокировать текущий поток, он находится в ожидании в очереди.

Lock отличается от Mutex
Синхронизация блокировки между несколькими потоками
Синхронизация нескольких потоков между процессами Mutex или синхронизация нескольких процессов
В .Net многопоточном программировании часто используются классы AutoResetEvent и ManualResetEvent, и их применение очень похоже, но есть различия. Метод Set переводит сигнал в состояние отправки, метод Reset — в состояние без отправки, а WaitOne ждёт отправки сигнала. Начальное состояние конструктора может быть определено значением параметра: если оно истинно, оно не блокирует, а ложное — блокирующее состояние. Если поток вызывает метод WaitOne, поток получает сигнал в состоянии отправки и продолжает выполняться вниз. Разница в том, что после вызова AutoResetEvent.WaitOne() позволяет одновременно входить только один поток, и когда поток получает сигнал, AutoResetEvent автоматически переводит сигнал в состояние отправки, а другие потоки, вызывающие WaitOne, могут продолжать ждать. То есть AutoResetEvent пробуждает только одну поток за раз; ManualResetEvent может пробудить несколько потоков, потому что когда один поток вызывает метод ManualResetEvent.Set(), другие потоки, вызывающие WaitOne, получают сигнал для продолжения выполнения, и ManualResetEvent не устанавливает автоматически сигнал на отказ от отправки. Другими словами, если метод ManualResetEvent.Reset() не вызывается вручную, ManualResetEvent останется сигнализированным, и ManualResetEvent может одновременно пробудить несколько потоков для продолжения выполнения.




Предыдущий:инструмент для разбора файлов .har и HARViewer
Следующий:Реализация распределённых замков Zookeeper
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com