..


Sponzorované odkazy

Správa sdílených dat v Javě

Článek napsal Damiano Verda
Strana 1 z 2

My můžeme myslet na sdílených dat, jako všechny další úkoly zpracování informací musí být vystavena na více stran. Představte si například, uložení číselné hodnoty představující euro / dolar. Máme program, který pravidelně kontroluje, co kurzu a aktualizuje hodnotu proměnné. Jeden nebo více jiných programů, ale bude používat aktualizované informace k provozu směnného kurzu cenu.

Všimněte si, jak vedení společné, a to iv tomto jednoduchém příkladu, je třeba věnovat zvláštní pozornost. Představte si například, že když aplikace potřebuje číst kurzu změnit, je také obdrží jiného programu, žádost o změnu kurzu sám.

Který je proveden jako první? Směnného kurzu, který probíhá? Problém je dokonce v některých případech poněkud složitější, může být ještě vážnější.

Představte si, že proměnná zájem není základní, ale například, sestává ze souboru dat. Může se provádět pouze částečné psát, a pak následuje čtení z dokončení psaní. Transakce by pak byla provedena se souborem hodnot, změnila jen částečně, což vede k nesmyslné výsledky, a proto nepřijatelné.

Vzhledem k existenci tohoto druhu problémů mnoha programovacích jazycích poskytovat konkrétní nástroje pro správu sdílených proměnných. Budeme zkoumat dále zejména v této kategorii problémů je řešen v programovacím jazyce Java, jeden z nejpoužívanějších ze všech.

Nejprve musíte pochopit, jak můžeme zajistit, že pouze jeden program současně, nebo přesněji jen jedno vlákno v době (jeden závit je základní součástí procesu, nebo program, tedy program se může skládat z více vláken, běžet současně) je přístup ke sdílené proměnné. Mechanismus, který nám umožňuje nabídnout Tato záruka se nazývá vzájemné vyloučení.

Vzájemné vyloučení

Představte si, že vytvoření třídy (nebo soubor dat a metod, které jsou užitečné funkce pro zpracování dat sám) s názvem Variabile_Condivisa v následující struktuře:






 public class Variabile_Condivisa







 {



   



 euro_dollaro plavat;



   



 euro_sterlina plavat;





   



 Variabile_Condivisa ()



  



 {



     



 euro_dollaro = 1;



     



 euro_sterlina = 1;



  



 }





   



 set_euro_dollaro neplatné (float e_d) = {euro_dollaro e_d;}



   



 set_euro_sterlina neplatné (float e_s) = {euro_sterlina e_s;}





   



 get_euro_dollaro float () {return euro_dollaro;}



   



 get_euro_sterlina float () {return euro_sterlina;}







 }



Dva příkazy, a to euro_dollaro euro_sterlina, což představuje směnného kurzu eura / dolar a euro / dolar a že si přejeme, aby sdílení informací mezi více programy (nebo mezi více vláken). Vyvinuté metody umožňují přiřadit hodnotu těchto údajů (a set_euro_dollaro set_euro_sterlina) a přečtěte si tyto hodnoty (a get_euro_dollaro get_euro_sterlina).

Pak jsme se zjistit zvláštním způsobem (Variabile_Condivisa), který se nazývá konstruktor třídy je proveden, a že vytvoření každé Variabile_Condivisa, v tomto případě nastavení hodnoty proměnných a euro_dollaro euro_sterlina jsou nastaveny na hodnotu 1.

Pak jsme se vytvořit v našem programu typ objektu jmenoval var Variabile_Condivisa (třída představuje soubor subjektů se společnými vlastnostmi, zatímco objekt představuje specifický prvek této množiny, které lze odkazovat v rámci programu ) takto:






 Variabile_Condivisa Variabile_Condivisa var = new ();



Jak můžeme nyní zaručit, že nejsou žádné problémy při správě dat sdílených var? Jazyk Java poskytuje klíčové slovo (nebo slova) synchronizované, který přijímá nějaký objekt jako parametr. Díky synchronizaci, můžete definovat, jak je uvedeno v příkladu, blok kódu:





 synchronizovat (VAR)







 {



  



 / / Synchronizované bloky kódu odděleny (VAR)

  





 }



Před provedením pokynů v synchronizaci bloku, jakékoli vlákno získá zámek na proměnnou var, nebo zablokovat všechny další přístup na stejném bloku kódu, dokud se uvolní, nebo až po spuštění celého bloku Příklad kódu odděleny složenými závorkami.

Jinými slovy, první závit (které jsme si představit, volat jako první), který provádí synchronizaci prohlášení (var), ve skutečnosti vytváří bariéru, která brání jakékoliv jiné vlákno provést synchronizaci prohlášení (VAR), dokud první nebyla dokončena provádění synchronizované bloku kódu odděleny. V těchto bloků jsou pak vloženy instrukce pro čtení nebo zápis sdílených dat.

Tímto způsobem je zaručeno vzájemné vyloučení, které zajistí, že jen jedno vlákno v době, může přístup ke sdílené proměnné. To by mělo být známé, nicméně, že je třeba pečlivě vybírat objekt předán jako parametr do synchronizovány. To musí být předmětem společné pro všechny závity, ve kterém chcete vytvořit mechanismus pro vzájemné vyloučení, například, jako v tomto případě, proměnné, které chcete číst nebo upravovat.

Představte si, že v tomto bodě, kterou chcete nastavit náš program tak, aby vlákna, které chcete číst hodnoty proměnné var se odložit a hodnotí výsledky až po první aktualizaci po jejich žádosti. Představte si, že chcete definovat synchronizační mechanismus mezi čtení a psaní.

Ve stejné kategorii ...
E-Learning
Linux (kurz) Linux (kurz)
Kompletní průvodce pro open-source systému. Od 49 €.
PHP (kurz) PHP (kurz)
Celý kurz pro vytváření dynamických webů. Od 49 €.
Ruby a Ruby on Rails (kurz) Ruby a Ruby on Rails (kurz)
Vytvořit software a webových aplikací s Ruby a RoR. Od 39 €.
Sponzorované odkazy