Synchronizace (informatika)

Synchronizace označuje v informatice dva podobné koncepty: synchronizace procesů a synchronizace dat. Synchronizace procesů označuje situaci, kdy se více procesů má v určitém okamžiku sejít (tzv. handshake) kvůli vzájemné dohodě nebo společné akci. Synchronizace dat znamená udržet více kopií dat (dataset) v soudržnosti nebo udržet integritu dat. Pro zajištění synchronizace dat jsou používána synchronizační primitiva.

Synchronizační primitiva

Synchronizační primitiva jsou prostředky umožňující paralelně běžícím aplikacím ošetřit současný přístup ke sdíleným prostředkům. Ve smyslu algoritmu se jedná o rozhraní, a jeho implementace není důležitá. Chybné použití synchronizačních primitiv může vést k jejich neúčinnosti (tedy k prostředku stejně mohou přistoupit dva procesy najednou) nebo k deadlocku (vzájemnému zablokování).

Mezi synchronizační primitiva patří:

Pro uvedená synchronizační primitiva platí, že jsou vzájemně ekvivalentní – tedy že pokud máte k dispozici jedno z nich, můžete s jeho pomocí implementovat ostatní. S výjimkou zámků to lze navíc dokázat bez aktivního čekání: na implementaci pomocí zámků potřebujete spolupráci plánovače procesů (možnost uspat program a později ho probudit) nebo aktivně čekat (stačí jeden „zámkový server“ neustále prohlížející oblasti sdílené paměti a interpretující je jako zprávy. Ostatní procesy pak mohou čekat na zámcích, které vlastní a uvolní právě tehdy, když jim vyřizuje zprávu.) Pro implementaci semaforů pomocí front zpráv procesu potřebujete „semaforový server“ starající se o semafor, ale ten čeká pasivně. Pro fronty pojmenované server nepotřebujete.

Zámek a semafor

Zámky a semafory bývají implementovány operačním systémem pomocí atomických operací na sdílené paměti a plánovače. Pro synchronizaci v paralelním programování stačí atomické operace na sdílené paměti (čekají na sebe procesy na různých procesorech a tedy mohou čekat aktivně) a je možné je implementovat i bez pomoci operačního systému.

Fronty zpráv

Fronty zpráv jsou primitivní operací v případě paralelního programování, ale je možné je implementovat v operačním systému i na jednom procesoru.

Monitor

Monitor je možné realizovat pouze s podporou programovacího jazyka.

Programování

V běžné programátorské praxi se přetřásá především synchronizace nad objekty sídlícími v paměti programu; objekty dostupné skrze 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 paměti programu se synchronizují vlákna.

Synchronizace vláken, jejíž schéma lze použít i pro synchronizaci programů,[1] se popisuje tak, že sled instrukcí, který při vyloučení souběhu 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ší 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. zablokována; aplikované synchronizační primitivum se nazývá zámek. Ve vysokoúrovňových 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, jenž je značně populární, lze kritickou sekci vložit do složené závorky uvozené klíčovým slovem synchronized, 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 metodu, načež se jako objekt synchronizace použije jeho instance, a konečně je jako vyžadující synchronní přístup možné označit atribut třídy — pak je synchronizace omezena jen na něj.[2]

Synchronizovaný atribut třídy:

class Foo {
  
  protected synchronized int foo;
  
}

Synchronizovaný blok — objektem synchronizace je vlastní instance třídy (this):

protected void foo() {
  
  synchronized(this) {
    
  }
  
}

Synchronizovaná metoda:

protected synchronized void foo() {
  
}

Reference

V tomto článku byl použit překlad textu z článku Synchronization (computer science) na anglické Wikipedii.

  1. Zjednodušeně řečeno, z pohledu operačního systému je mezi procesem a vláknem rozdíl jen v tom, že vlákna jednoho procesu sdílejí paměťový prostor (mohou si vzájemně přepisovat data).
  2. 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í.

Související články

Externí odkazy

Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.

Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/Synchronizační_primitivum
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.