Ar pavedieniem saistītie jēdzieni 1. Pavedienu sinhronizācija ManualResetEvent Set() metode iestata stāvokli uz Signaled Reset(), lai iestatītu to bez signāla WaitOne() bloķēs, līdz tam būs signāls, un, ja WaitOne izsaukšanas brīdī būs signāls, tas netiks bloķēts Automātiskā atiestatīšana Atšķirība no ManualResetEvent ir tāda, ka AutoResetEvent.WaitOne() automātiski maina notikuma objekta stāvokli, tas ir, notikuma stāvoklis mainās katru reizi, kad tiek izpildīts AutoResetEvent.WaitOne(). Signāls - > nav signāla; Nav signāla – > ir signāls
example:
myResetEven.Set(), kas faktiski ir ekvivalents slēdzim, ja set() metode netiek izpildīta, nākamais waitOne() nevarēs gaidīt, kamēr paziņojums ļaus tam izpildīt, lai paziņojums pēc waitOne netiktu izpildīts. Monitora metode Wait() Pulse() mehānisms tiek izmantots starppavedienu mijiedarbībai, kad objekts izstaro Monitor.Wait(), pavediens, kas piekļūst objektam, paliks gaidīšanas stāvoklī. līdz brīdim, kad tiek saņemts modināšanas signāls. Monitor.Pulse() tiek izmantots, lai nosūtītu signālus uz gaidīšanas pavedienu. Tas nozīmē, ka kritiskajā zonā starp Monitor.Enter() un Monitor.Exit(), lai atbrīvotu objekta bloķēšanu un bloķētu pašreizējo pavedienu, tas ir gaidīšanas stāvoklī rindā.
Lock atšķiras no Mutex Sinhronizācijas bloķēšana starp vairākiem pavedieniem Sinhronizācija vairāku pavedienu starp Mutex procesiem, vai sinhronizācija vairāku procesu .Net daudzpavedienu programmēšanā bieži tiek izmantotas klases AutoResetEvent un ManualResetEvent, un to lietojums ir ļoti līdzīgs, taču pastāv atšķirības. Iestatīšanas metode nodod signālu nosūtīšanas stāvoklī, atiestatīšanas metode nodod signālu nesūtīšanas stāvoklī, un WaitOne gaida, kamēr signāls tiks nosūtīts. Konstruktora sākotnējo stāvokli var noteikt pēc parametra vērtības, ja tā ir taisnība, tā nav bloķējoša, un nepatiess ir bloķēšanas stāvoklis. Ja pavediens izsauc WaitOne metodi, pavediens saņem signālu, kad tas ir sūtīšanas stāvoklī un turpina izpildīt uz leju. Atšķirība ir tāda, ka pēc zvana AutoResetEvent.WaitOne() ļauj ievadīt tikai vienu pavedienu vienlaikus, un, kad pavediens saņem signālu, AutoResetEvent automātiski ievietos signālu bez sūtīšanas stāvokļa, un pārējie pavedieni, kas izsauc WaitOne, var tikai turpināt gaidīt. Tas nozīmē, ka AutoResetEvent vienlaikus pamodina tikai vienu pavedienu; ManualResetEvent var pamodināt vairākus pavedienus, jo, kad viens pavediens izsauc ManualResetEvent.Set() metodi, pārējie pavedieni, kas izsauc WaitOne, saņem signālu, lai turpinātu izpildi, un ManualResetEvent automātiski neiestata signālu nesūtīt. Citiem vārdiem sakot, ja vien ManualResetEvent.Reset() metode netiek izsaukta manuāli, ManualResetEvent paliks signalizēts un ManualResetEvent var pamodināt vairākus pavedienus vienlaikus, lai turpinātu izpildi. |