Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 17115|Válasz: 0

[Kommunikáció] Az AutoResetEvent részletes magyarázata a .net/c# fájlban

[Linket másol]
Közzétéve 2018. 03. 20. 13:19:01 | | |

Szálhoz kapcsolódó fogalmak
1. Szálszinkronizáció
ManualResetEvent
A Set() metódus az állapotot Signaled-re állítja be
Reset() hogy beállítsa jel nélküli állapotra
A WaitOne() blokkol, amíg nincs jel, és ha a híváskor van jel, akkor nem blokkol
AutoResetEvent
A különbség a ManualResetEventtől az, hogy az AutoResetEvent.WaitOne() automatikusan megváltoztatja az eseményobjektum állapotát, vagyis az esemény állapota minden alkalommal változik, amikor az AutoResetEvent.WaitOne() végrehajtása történik. Jel – > nincs jel; Nincs jel – > van jele
example:


  
myResetEven.Set(), amely valójában egy switch-hez hasonló jellegű, ha a set() metódus nem lesz elindulva, a következő waitOne() nem tud megvárni, hogy az értesítés végrehajtsa, így a waitOne utáni utasítás nem kerül le.
Monitor módszer
A Wait() Pulse() mechanizmust az interthread interthread interakcióhoz használják, amikor egy objektum kibocsátja a Monitor.Wait() kibocsátást, a szál, amely hozzáfér az objektumhoz, várakozó állapotban marad. Amíg ébresztő jelet nem kap. A monitor.pulse() jelek küldésére szolgál a várakozó szálhoz.
Vagyis a kritikus területen a Monitor.Enter() és a Monitor.Exit() között, hogy feloldják az objektum zárolását és blokkolják a jelenlegi szálat, az a sorban várakozó állapotban van.

A zár más, mint a Mutex
Zár szinkronizáció több szál között
Több szál szinkronizálása Mutex folyamatok között, vagy több folyamat szinkronizálása
A .Net többszálas programozásban gyakran használják az AutoResetEvent és a ManualResetEvent osztályokat, amelyek nagyon hasonlóak, de vannak különbségek. A Set metódus a jelet a küldési állapotba helyezi, a Reset metódus a jelet a nem küldő állapotba, a WaitOne pedig várja a jel elküldését. A konstruktor kezdeti állapota meghatározható a paraméterérték alapján, ha igaz, akkor nem blokkol, a hamis pedig a blokkoló állapot. Ha egy szál a WaitOne metódusát hívja, a szál akkor kapja meg a jelet, amikor a küldési állapotban van, és tovább hajt lefelé. A különbség az, hogy a hívás után az AutoResetEvent.WaitOne() egyszerre csak egy szálnak engedélyezi a belépést, és amikor egy szál jelet kap, AutoResetEvent automatikusan a jelet nem küldő állapotba helyezi, és a WaitOne-t hívó többi szál csak folytathatja a várakozást. Vagyis az AutoResetEvent egyszerre csak egy szálat ébreszt fel; A ManualResetEvent több szálat is felidézhet, mert amikor egy szál a ManualResetEvent.Set() metódusát hívja, a többi WaitOne-t hívó szál megkapja a jelet a végrehajtás folytatására, és a ManualResetEvent nem állítja automatikusan be, hogy nem küldi a jelet. Más szóval, hacsak a ManualResetEvent.Reset() metódus nem hívja meg kézzel, a ManualResetEvent továbbra is jelezve marad, és a ManualResetEvent egyszerre több szálat is felidézhet a végrehajtás folytatásához.




Előző:.har file parsing tool és HARViewer
Következő:Zookeeper elosztott zár megvalósítása
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com