Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 20027|Odpověď: 0

[Zdroj] Klíčové slovo C# lock označuje blok příkazů jako kritickou oblast získáním mutexu pro daný objekt, vykonáním příkazu, ale...

[Kopírovat odkaz]
Zveřejněno 31.12.2015 17:51:01 | | |
Klíčové slovo lock označuje blok příkazů jako kritickou zónu tím, že pro daný objekt vezme mutex, vykoná příkaz a poté uvolní zámek.

Příkaz lock v podstatě používá Monitor.Enter a Monitor.Exit, tedy Monitor.Enter(this) se vykoná při vykonání lock(this) a Monitor.Exit(this) se vykoná na konci curly brace. Co znamená, že pro jakýkoli objekt je první část paměti adresa všech metod a druhá část je index. Ukazuje na SyncBlock v oblasti cache SyncBlock v CLR. Co to znamená? To znamená, že když spustíte Monitor.Enter(Object), pokud je indexová hodnota objektu záporná, vyberte SyncBlock z cache SyncBlock a vložte jeho adresu do indexu objektu. Tím se dokončí zámek označený objektem a ostatní vlákna chtějí znovu provést operaci Monitor.Enter(object), která získá index s kladným objektem, a pak počkají. Dokud index nebude záporný, tj. vlákno použije Monitor.Exit(objekt) k změně indexu na záporný.

Na co byste měli dávat pozor při používání zámku:
1.lock nemůže uzamknout nullovou hodnotu Objekt může ukázat na null, ale null nemusí být uvolněn. (Viz také: Pochopení plného nullu)
2.lock nemůže uzamknout typ řetězce, i když je také referenčním typem. Protože typ řetězce je "přejížděn" CLR
To znamená, že v celém programu existuje pouze jedna instance daného řetězce a tento stejný objekt reprezentuje tento text ve všech vláknech všech běžících aplikačních domén. Proto pokud je zámek umístěn na řetězci se stejným obsahem kdekoli v procesu aplikace, všechny instance tohoto řetězce v aplikaci budou zamčeny. Proto je nejlepší uzamknout soukromé nebo chráněné členy, kteří nebudou vydržováni.
3.locklock objekt je paměťová hranice programového bloku
4. Typ hodnoty nelze uzamknout, protože "objekt je uvolněn" červeně v předchozím textu a typ hodnoty není referenčním typem
5.lock zabraňuje uzamčení veřejných typů nebo objektů, které nejsou programem řízeny.
Například pokud je instance veřejně přístupná, může být uzamčení (toto) problematické, protože nekontrolovaný kód může také uzamknout objekt. To může vést k zablokování, kdy dvě nebo více vláken čekají na uvolnění stejného objektu. Zamykaní veřejných datových typů (na rozdíl od objektů) může také způsobovat problémy ze stejného důvodu.
Při použití lock(this) může být hodnota proměnné člena třídy změněna metodou, která není v kritické zóně

Scénář aplikace: Často se používá k prevenci nejistých výjimek v hodnotě veřejných proměnných způsobených vícevláknovými operacemi, aby byla zajištěna bezpečnost operací









Předchozí:Win8 spouští službu SQL Server 2012
Další:[Speed] IP segment open port skener pro rychlou rychlost skenování!!
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com