Synchronizace: Porovnání verzí

Smazaný obsah Přidaný obsah
m +možná hledáte
značka: {{hlavní článek}} v článku
Řádek 14:
 
== Informatika ==
{{Hlavní článek|Synchronizace (informatika)}}
<!-- Výraz synchronizace se též používá při legálním kopírování, nebo používání datových souborů, obsahujících umělecká díla . audio, obrazy, texty. Je to obvyklý výraz při sjednávání poskytnutí autorských práv umělců pro licencované použítí např. hudba ve filmu atd. Zpravidla se jedná o licence časově, nebo obsahově omezené, aby nedošlo k rozporu s autorskýny zákony danýmy příslušným státem. -->
 
<!-- Výraz synchronizace se též používá při legálním kopírování, nebo používání datových souborů, obsahujících umělecká díla . audio, obrazy, texty. Je to obvyklý výraz při sjednávání poskytnutí autorských práv umělců pro licencované použítípoužití např. hudba ve filmu atd. Zpravidla se jedná o licence časově, nebo obsahově omezené, aby nedošlo k rozporu s autorskýnyautorskými zákony danýmydanými příslušným státem.{{Chybí zdroj}} -->
 
V [[Informatika|informatice]] má synchronizace nejméně dva zcela odlišné významy — synchronizace [[Data|dat]] má za úkol dbát o to, aby v nějaké [[Množina|množině]] úložišť byla udržována stejná data, resp. aby tato úložiště byla svým obsahem aktuální, synchronizace entit zpracovávajících data ([[Proces (program)|procesů]] nebo vláken) zajišťuje, že mezi jednotlivými operacemi, jež tyto entity vykonávají, nedojde k [[souběh]]u (např. se mezi první a druhou stránkou jednoho dokumentu nevytiskne jiný dokument).
 
=== Programování ===
V běžné [[Programátor|programátorské]] praxi se přetřásá především synchronizace nad objekty sídlícími v paměti [[Počítačový program|programu]]; objekty dostupné skrze [[Systémové volání|systémování volání]] synchronizuje [[operační systém]], programování jehož komponent běžný programátor neprovádí. Při vylučování souběhu operací s objekty v [[Počítačová paměť|paměti]] programu se synchronizují [[Vlákno (program)|vlákna]].
 
Synchronizace vláken, jejíž schéma lze použít i pro synchronizaci programů<ref name="difference_between_program_and_thread">Zjednodušeně řečeno, z pohledu [[Operační systém|operačního systému]] je mezi [[Proces (program)|procesem]] a [[Vlákno (program)|vláknem]] rozdíl jen v tom, že vlákna jednoho procesu sdílejí [[Počítačová paměť|paměťový]] prostor (mohou si vzájemně přepisovat data).</ref>, se popisuje tak, že sled [[Strojová instrukce|instrukcí]], který při vyloučení [[souběh]]u konkurenčními entitami nesmí být přerušen, se označuje jako [[kritická sekce]], a synchronizace se řeší tak, že kritická sekce se zastřeší tzv. [[Synchronizační primitivum|synchronizačním primitivem]], na jehož začátku je entita zpracovávající data v případě, kdy se v kritické sekci nachází jiná, tzv. [[Proces (program)#Základní stavy procesů|zablokována]]; aplikované synchronizační primitivum se nazývá ''zámek''. Ve vysokoúrovňových [[Programovací jazyk|programovacích jazycích]] pro synchronizační primitiva existují sofistikované jazykové konstrukce, které výrazně zpřehledňují [[zdrojový kód]]; výbava takových jazyků zpravidla obsahuje taktéž implementace komplikovanějších zámků, kdy se entity vyznačují specifickým přístupem a není nutné vylučovat souběh každé dvojice z nich (typicky těch, které pouze čtou), což je žádoucí s ohledem na výkon celého výpočetního systému.
 
==== Java ====
Ve vysokoúrovňovém programovacím jazyce [[Java (programovací jazyk)|Java]], jenž je značně populární, lze kritickou sekci vložit do složené závorky uvozené [[Klíčové slovo|klíčovým slovem]] <code>synchronized</code>, po němž bezprostředně následuje [[identifikátor]] objektu, nad nímž se synchronizace má provádět, dále lze za synchronizovanou vydat celou [[Metoda (objektově orientované programování)|metodu]], načež se jako objekt synchronizace použije jeho [[Instance třídy|instance]], a konečně je jako vyžadující synchronní přístup možné označit atribut [[Třída (programování)|třídy]] — pak je synchronizace omezena jen na něj.<ref name="">Požadavky na vzájemné blokování entit zpracovávajících data je v zájmu výkonu žádoucí minimalizovat nejen co do okruhu zúčastněných entit, nýbrž také co do rozsahu objektů, nad nimiž se synchronizace provádí.</ref>
 
Synchronizovaný atribut třídy:
<source lang="java">
class Foo {
protected synchronized int foo;
}
</source>
 
Synchronizovaný blok — objektem synchronizace je vlastní instance třídy (<code>this</code>):
<source lang="java">
protected void foo() {
synchronized(this) {
}
}
</source>
 
Synchronizovaná metoda:
<source lang="java">
protected synchronized void foo() {
}
</source>
 
== Fotografování ==