Vzájemné zablokování
Vzájemné zablokování je stav, kdy program nemůže získat přístup ke zdroji, který potřebuje k pokračování. Když aktivní aplikace narazí na vzájemné zablokování, může se „zaseknout“ nebo přestat reagovat.
Zdroje, například uložená nebo uložená v mezipaměti data, mohou být při přístupu uzamčeny konkrétním procesem v rámci programu. Uzamčení dat brání ostatním procesům v předčasném přepsání dat. Pokud proces nebo dotaz potřebuje přistupovat k uzamčeným datům, ale proces, který data uzamkl, je neuvolní, může dojít ke vzájemnému zablokování.
Následující situace například způsobí vzájemné zablokování mezi dvěma procesy:
- Proces 1 požádá proces 2 o zdroj B.
- Zdroj B je během běhu procesu 2 uzamčen.
- Proces 2 potřebuje ke svému dokončení zdroj A od procesu 1.
- Zdroj A je během běhu procesu 1 uzamčen.
Výsledkem je, že proces 1 a proces 2 čekají na dokončení jeden na druhý. Protože žádný z procesů nemůže pokračovat, dokud druhý nedokončí svou činnost, vznikne vzájemné zablokování.
Jak předcházet vzájemnému zablokování
Vývojáři mohou vzájemnému zablokování předcházet tím, že se ve své programovací logice vyhnou podmínkám vedoucím k uzamčení. Namísto toho, aby dva procesy závisely jeden na druhém, lze například zdrojový kód napsat tak, aby každé vlákno dokončilo svou činnost dříve, než jiné vlákno potřebuje jeho zdroje. Zajištěním dostupnosti dat v okamžiku, kdy jsou potřeba, mohou programátoři chránit své aplikace před zaseknutím nebo pádem.
NOTE: Vzájemné zablokování může nastat také při spuštění dvou či více dotazů v databázi. Transakční databáze uzamykají aktivní záznamy, a brání tak ostatním dotazům v přístupu k nim. Pokud proces nemůže získat přístup k uzamčenému záznamu, může dojít ke vzájemnému zablokování databáze.
Otestujte své znalosti