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

Изглед: 17115|Отговор: 0

[Комуникация] Подробно обяснение на AutoResetEvent в .net/c#

[Копирай линк]
Публикувано в 20.03.2018 г. 13:19:01 ч. | | |

Концепции, свързани с нишки
1. Синхронизация на нишки
ManualResetEvent
Методът Set() задава състоянието на Signaled
Reset(), за да го настроя на no signal
WaitOne() ще блокира, докато не получи сигнал, и ако има сигнал в момента на повикване към WaitOne, няма да блокира
AutoResetEvent
Разликата от ManualResetEvent е, че AutoResetEvent.WaitOne() автоматично променя състоянието на обекта събитие, тоест състоянието на събитието се променя всеки път, когато се изпълни AutoResetEvent.WaitOne(). Сигнал - > няма сигнал; Няма сигнал – > има сигнал
example:


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

Lock е различен от Mutex
Синхронизация на заключване между множество нишки
Синхронизация на множество нишки между Mutex процеси или синхронизация на множество процеси
В .Net мултипоточното програмиране често се използват класовете AutoResetEvent и ManualResetEvent, като употребата им е много сходна, но има разлики. Методът Set поставя сигнала в състояние на изпращане, методът Reset поставя сигнала в състояние без изпращане, а WaitOne чака сигналът да бъде изпратен. Началното състояние на конструктора може да се определи от стойността на параметъра, ако е вярно, то не блокира, а false е блокиращото състояние. Ако нишката извика метода WaitOne, тя получава сигнала, когато е в състояние на изпращане, и продължава да изпълнява надолу. Разликата е, че след обаждането AutoResetEvent.WaitOne() позволява влизане само на една нишка наведнъж, а когато нишка получи сигнал, AutoResetEvent автоматично поставя сигнала в състояние без изпращане, а другите нишки, които викат WaitOne, могат само да продължат да чакат. Тоест, AutoResetEvent събужда само една нишка наведнъж; ManualResetEvent може да събуди няколко нишки, защото когато една нишка извика метода ManualResetEvent.Set(), другите нишки, които извикват WaitOne, получават сигнал за продължаване на изпълнението, а ManualResetEvent не задава автоматично сигнала да не изпраща. С други думи, освен ако методът ManualResetEvent.Reset() не се извика ръчно, ManualResetEvent ще остане сигнализиран и може да събуди няколко нишки едновременно, за да продължи изпълнението.




Предишен:.har инструмент за парсиране на файлове и HARViewer
Следващ:Разпределена заключваща реализация на Zookeeper
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com