Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 20027|Odgovoriti: 0

[Vir] Ključna beseda C# lock označi blok stavkov kot kritično območje z pridobitvijo mutexa za določen objekt, izvedbo stavka, vendar...

[Kopiraj povezavo]
Objavljeno na 31. 12. 2015 17:51:01 | | |
Ključna beseda zaklepa označuje blok stavkov kot kritično območje tako, da za določen objekt vzame mutex, izvede stavek in nato sprosti zaklep.

Stavek lock v osnovi uporablja Monitor.Enter in Monitor.Exit, torej se Monitor.Enter(this) izvede, ko se lock(this) izvede, Monitor.Exit(this) pa na koncu zavitega oklepaja. Kaj pomeni to, da je za vsak objekt prvi del pomnilnika naslov vseh metod, drugi del pa indeks. Pokaže na SyncBlock v območju predpomnilnika SyncBlock v CLR. Kaj to pomeni? To pomeni, da ko izvedete Monitor.Enter(Object), če je indeksna vrednost objekta negativna, izberite SyncBlock iz predpomnilnika SyncBlock in njegov naslov vstavite v indeks objekta. S tem se zaključi zaklep, označen z objektom, druge niti pa želijo ponovno izvesti operacijo Monitor.Enter(object), ki dobi indeks s pozitivnim objektom, nato pa počakajo. Dokler indeks ne postane negativen, tj. nit uporabi Monitor.Exit(object) za spremembo indeksa v negativnega.

Na kaj morate biti pozorni pri uporabi zaklepa:
1.lock ne more zakleniti ničelne vrednosti Objekt lahko kaže na null, vendar null ni treba sprostiti. (Glej tudi: Razumevanje popolne nulle)
2.lock ne more zakleniti vrste niza, čeprav je tudi referenčna vrsta. Ker je tip niza "lebden" s strani CLR
To pomeni, da je v celotnem programu le ena instanca določenega niza, in ta isti objekt predstavlja to besedilo v vseh nitih vseh delujočih aplikacijskih domen. Zato, dokler je ključavnica postavljena na niz z enako vsebino kjerkoli v postopku aplikacije, bodo vse instance tega niza v aplikaciji zaklenjene. Zato je najbolje, da zaklenete zasebne ali zaščitene člane, ki ne bodo trajni.
3.locklock je objekt pomnilniška meja programskega bloka
4. Tip vrednosti ni mogoče zakleniti, ker je "objekt sproščen" označen z rdečo barvo v prejšnjem besedilu, in tip vrednosti ni referenčni tip
5.lock preprečuje zaklepanje javnih tipov ali objektov, ki niso pod nadzorom programa.
Na primer, če je instanca javno dostopna, je zaklepanje (to) lahko problematično, saj lahko nenadzorovana koda zaklene tudi objekt. To lahko vodi do zastojev, kjer dve ali več niti čakata, da sprostijo isti objekt. Zaklepanje javnih podatkovnih tipov (v nasprotju z objekti) lahko prav tako povzroči težave iz istega razloga.
Pri uporabi lock(this) se lahko vrednost spremenljivke člana razreda spremeni z metodo, ki ni v kritični coni

Scenarij uporabe: Pogosto se uporablja za preprečevanje negotovih izjem v vrednosti javnih spremenljivk, ki jih povzročajo večnitne operacije, da se zagotovi varnost operacij









Prejšnji:Win8 začenja storitev SQL Server 2012
Naslednji:[Hitrost] IP segment odprt skener za hitro skeniranje!!
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com