Mutex verzus udalosť
V C # existuje veľa rôznych možností synchronizácie vlákien. Dva viac používané sú mutex a event. Aký je presne rozdiel medzi týmito dvoma? Ktorá z nich je lepšou možnosťou?
Možnosť udalosti je schopná dať vláknom možnosť blokovania, kým sa nevysiela udalosť, teda názov „udalosť“. Je to rovnaké ako niečo spať a prebudiť sa, len keď sa stane niečo dôležitého. Udalosti sú na rozdiel od mutexov, pretože mutexy nemajú možnosť alebo funkciu signalizácie. Udalosti dokážu signál vyčistiť, keď sa niekto, kto naň mohol čakať, prebudil. Dokonca aj API sú schopné povoliť blokovanie, kým nie je signalizovaná jedna alebo všetky rôzne udalosti. Okrem toho sú udalosti objektmi jadra. Nie sú „ľahšie“ v porovnaní s mutexami. Udalosť je v podstate objekt jadra, ktorý má dva stavy. Udalosť obvykle signalizuje príchod udalosti a niekedy aj koniec I / O operácie.
„Mutex“ znamená vzájomné vylúčenie. Je to forma mechanizmu koordinovanej koordinácie pre zdieľané zdroje. Ber to ako formu transakcie. Nie ste povinní čakať, hoci chcete získať prístup k niekoľkým zdieľaným zdrojom (iba v prípade, že k nim už majú prístup iní), ktoré blokujete. Mutex pozostáva z dvoch stavov, hoci existuje na uskutočnenie vzájomného vylúčenia. Je to v prípade, keď chcete chrániť úsek kódu, ktorý zvyčajne aktualizuje zdieľaný prostriedok, pred časťou, v ktorej je nárokovaný mutex, na tú časť, v ktorej bude vydaný. To vedie k tomu, že cez tento úsek nemôže prechádzať žiadne iné vlákno.
Ľudia, ktorí sa pokúsili simulovať udalosť pomocou mutexu, sa museli stretnúť s problémom, keď hneď ako sa uzamkne zámok alebo sa udalosť signalizuje, daná osoba udržiava všetkých ostatných až do uvoľnenia zámku. Toto nie je sémantika signalizovanej udalosti. Udalosť môže zostať zverejnená a bude k dispozícii forma brány pre všetky testovanie vlákien v prípade, že nebudú mať žiadne zámky. Mutex, ktorý sa zaviazal k synchronizácii medziprocesov, je v objekte v režime jadra. Udalosti uskutočnené na viacvláknovú synchronizáciu jedným spôsobom sú v objekte v užívateľskom režime.
Mutexový objekt je príliš ťažký a príliš všeobecný. Objekty udalostí sú omnoho ľahšie. Synchronizácia v užívateľskom režime sa používa vo väčšine situácií z dôvodu, že poskytuje menej cyklov CPU. Mutex je veľmi podobný kritickej časti a používa sa na synchronizáciu prístupu k zdieľaným zdrojom. Udalosti majú úplne inú funkciu, pretože sa používajú na synchronizáciu úloh alebo na riadenie plánovania úloh pre niektorých ľudí.
Udalosti sú skôr premennou stavu, na rozdiel od mutexu, ktorý je skôr ako
sledovať v niektorej terminológii, alebo to môže byť tradičná forma semafor / mutex.
Zhrnutie:
1.Možnosť udalosti je schopná dať vláknom možnosť blokovania, kým sa nevysiela udalosť, teda názov „udalosť“.
2. Udalosť je v podstate objekt jadra, ktorý má dva stavy. Udalosť obvykle signalizuje príchod udalosti a niekedy aj koniec I / O operácie.
3. „Mutex“ znamená vzájomné vylúčenie. Je to forma mechanizmu koordinovanej koordinácie pre zdieľané zdroje.
4.Mutex zaviazaný na synchronizáciu medziprocesov je v objekte v jadrovom režime. Udalosti uskutočnené na viacvláknovú synchronizáciu jedným spôsobom sú v objekte v užívateľskom režime.
5.Udalosti sú skôr premennou stavu, na rozdiel od mutexu, ktorý je skôr ako
sledovať v niektorej terminológii, alebo to môže byť tradičná forma semafor / mutex.