Select the product you need help with
Popis sporech a zablokováníID článku: 317723 - Produkty, které se vztahují k tomuto článku. Na této stránceSouhrnVisual Basic .NET nebo Visual Basic 2005 nabízí možnost použít podprocesů v aplikacích jazyka pro první. Podprocesy představují ladění problémy jako například sporech a zablokování. Tento článek prozkoumá tyto dva problémy. Další informacePodmínky závodůSpor dochází při dvou podprocesů přístup sdílené proměnné současně. Přečte první podproces proměnné a druhý podproces čte z proměnné stejnou hodnotu. Potom podproces první a druhý podproces provádění jejich operací na hodnotě a mohou soupeřit viz podproces, který může zapsat hodnotu poslední sdílené proměnné. Hodnota podproces zapíše jeho hodnotu poslední je zachována, protože podprocesu je psaní nad hodnotou, že předchozí podproces autorem.Podrobnosti a příkladKaždý podproces je přidělen předdefinované období čas spuštění procesoru. Po vypršení času, který je přiřazen pro podproces kontext podprocesu je uloženo dokud jeho další zapnout na procesoru a začne provádění dalšího podproces procesoru.Jak lze příkaz jednořádkový způsobit spor? Prozkoumejte následující příklad dochází spor. Existují dva podprocesů a obě jsou aktualizace sdílené proměnné s názvem Celkový (které je představováno dword ptr ds: [031B49DCh] v kódu sestavení). Kód jazyka: Součet je 100 je 50 hodn1 a hodn2 je 15. Podproces 1 získává příležitost spouštět, ale pouze dokončí kroky 1 až 3. To znamená, že vlákno 1 číst proměnné a dokončení přidávání. Podproces 1 nyní právě čeká zapsat mimo jeho novou hodnotu 150. Po zastavení podprocesu 1 vlákno 2 získává zcela spustit. To znamená, že ji má zapsána hodnota, ji vypočítat (85) mimo k proměnné celkem. Nakonec vlákno 1 regains ovládací prvek a dokončí provádění. Zapíše jej mimo jeho hodnota (150). Po dokončení vlákno 1 hodnota celkem je tedy nyní 150 namísto 85. Viz Jak může být hlavní problém. Pokud to byly program bankovnictví, zákazník musel peněz v jejich účet by měl být přítomen. Tato chyba je náhodné, protože je možné pro vlákno 1 na dokončení jeho spuštění před jeho čas procesoru vyprší a potom vlákno 2 lze zahájit jeho spuštění. Pokud dojde k těmto událostem nedochází problém. Podproces provádění je nedeterministické, proto nelze řídit pořadí provádění nebo čas. Všimněte si také, může podprocesy odlišně spustit v modulu runtime versus režimu ladění. Viz také, že pokud spouštět každý podproces v řadě došlo k chybě nedojde. Díky této randomness tyto chyby mnohem těžší sledovat a ladění. K sporech zabránit, můžete zamknout sdílené proměnné tak, aby najednou pouze jeden podproces má přístup ke sdílené proměnné. To opatrně, protože pokud proměnná je uzamčen v podprocesu 1 a 2 vlákno také potřebuje proměnné vlákno 2 spuštění zastaví během 2 podproces čeká vlákno 1 uvolnění proměnné. (Další informace viz "SyncLock" v "Odkazy") PříznakyNejběžnější příznaku spor je nepředvídatelné hodnot proměnných, které jsou sdíleny mezi více podprocesů. To výsledky z unpredictability pořadí, ve kterém spouštět podprocesy. Někdy jeden podproces wins a někdy jiných podprocesu wins. Jindy provádění pracuje správně. Také Pokud je každý podproces spuštěn samostatně, hodnotu proměnné chová správně.ZablokováníZablokování dochází, když dvou podprocesů každé uzamknout různé proměnné současně a pokusu zamknout proměnné podproces již uzamčena. Výsledkem je každý podproces zastaví provádění a čeká jiných podproces uvolnění proměnné. Protože každý podproces drží proměnné, kterou chce podprocesu, nedojde k žádné akci, a zůstávají zablokované podprocesy.Podrobnosti a příkladNásledující kód obsahuje objekty LeftVal a RightVal:Zablokování vždy nedojde. Pokud vlákno 1 provede obě uzamčení před procesor zastaví jej, vlákno 1 provedení jeho operací a Odemknout sdílený proměnné. Po 1 vlákno odemkne proměnné, můžete vlákno 2 očekávaným pokračovat s jeho spuštění. Tato chyba se zdá zřejmé při těchto fragmenty kódu jsou umístěny vedle sebe, ale v praxi pravděpodobně kód zobrazí v samostatné moduly nebo oblastech váš kód. Tento velmi závažná chyba sledovat, protože stejný kód, může dojít provádění správné a nesprávné provádění. PříznakyBěžné příznaku zablokování je, že program nebo skupiny podprocesů přestane reagovat. Toto je známé také jako přestat reagovat. Nejméně dva podprocesů jsou jednotlivé čekání pro proměnnou uzamčen jiným podprocesem. Podprocesy není pokračovat, protože ani podproces uvolnění jeho proměnné, dokud získává jiné proměnné. Celý program může přestat reagovat, pokud program čeká na jednom nebo obou těchto podprocesů dokončení provádění.Co je vlákno?Procesy slouží k oddělení různých aplikací provádění v určený čas v jednom počítači. Operační systém spustit procesy, ale proveďte podprocesů. Podproces je jednotka provádění. Operační systém přiděluje čas procesoru pro podproces pro provádění podprocesu úkoly. Jeden proces může obsahovat více podprocesů provádění. Každý podproces udržuje vlastní obslužné rutiny výjimka plánování priorit a sadu struktur operační systém používá uložit kontext podprocesu, pokud podproces nelze dokončit jeho spuštění během doby, která byla přiřazena procesoru. V kontextu uchovávány až při příštím podprocesu obdrží čas procesoru. Kontext obsahuje informace, vyžaduje plynule pokračovat jeho spuštění podprocesu. Tyto informace zahrnují podprocesu Sada registrů procesoru a zásobník volání uvnitř adresový prostor procesu hostitele.OdkazyDalší informace hledat nápovědě Visual Studio následující klíčová slova:
316422 Další informace naleznete na následujícím webu:
(http://support.microsoft.com/kb/316422/EN-US/
)
INFORMACE: Průvodce pro threading jazyka .NET Threads and Threading
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconthreadsthreading.asp)
VlastnostiID článku: 317723 - Poslední aktualizace: 6. prosince 2006 - Revize: 2.3 Informace v tomto článku jsou určeny pro produkt:
Strojově přeložený článek Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum. Projděte si také anglickou verzi článku:317723
(http://support.microsoft.com/kb/317723/en-us/
)
|




Zpět nahoru








