Přeskočit na obsah

Synchronizační primitivum: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
do → z; podstatně starší článek, zachoval bych jeho historii
m +smazat
Řádek 1: Řádek 1:
{{Smazat|přesun proveden}}

{{Sloučit|Synchronizace (informatika)|z}}
{{Sloučit|Synchronizace (informatika)|z}}



Verze z 19. 6. 2016, 22:28

Synchronizační primitiva jsou v operačních systémech prostředky, umožňující zároveň 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ří zámek a jejich zobecnění semafory, fronty zpráv a monitor.

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 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 je možné realizovat pouze s podporou programovacího jazyka.

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í naimplementovat ty 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 scheduleru (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.

Související články

Zdroj