Komunikace mezi vlákny v rámci jednoho procesu je jednodušší než komunikace mezi různými procesy, a to právě díky sdílené paměti, pomocí které mohou vlákna komunikovat. Na druhé straně je třeba zajistit, aby vlákna k této sdílené paměti přistupovala synchronizovaně, aby nedocházelo např. k přepisu jedné informace několika vlákny současně. Problematika synchronizace procesů a vláken se studuje zejména v oblasti operačních systémů, i když v současné době je aktuální i při programování uživatelských aplikací.
Pokud nezajistíme synchronizovaný přístup ke sdíleným zdrojům (v rámci téže aplikace nebo i mezi více aplikacemi současně), může to vést k situacím jako je uváznutí nebo časový souběh. Při uváznutí (deadlock) přestanou dvě vlákna reagovat, neboť na sebe vzájemně čekají. Časový souběh nastává tehdy, pokud může k nějaké zvláštní situaci dojít v závislosti na kritickém načasování dvou událostí.
K synchronizaci přístupu ke sdíleným zdrojům se používají synchronizační objekty. Synchronizační objekt dává svému vlastníkovi právo přístupu ke sdílenému zdroji. Vlákno tedy musí na obdržení synchronizačního objektu čekat a až poté teprve může ke sdílenému zdroji přistupovat. Po ukončení operace objekt uvolní a tím umožní jeho přidělení případnému dalšímu vláknům, které čeká ve frontě spojené se synchronizačním objektem.
Typické sdílené zdroje vyžadující synchronizaci souběžného přístupu lze rozdělit do následujících skupin:
![]() | Úkol k zamyšlení |
Která periferní zařízení počítače typicky vyžadují synchronizaci procesů, které s nimi pracují? Jak je tato synchronizace zajištěna? | |