Blokování (programování)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 2. července 2015; kontroly vyžadují 5 úprav .

V informatice je zámek synchronizační  mechanismus , který umožňuje exkluzivní přístup ke sdílenému prostředku mezi více vlákny . Zámky jsou jedním ze způsobů, jak vynutit politiku řízení souběžnosti .

Typy zámků

V zásadě se používá měkký zámek , který předpokládá, že se každé vlákno pokusí získat zámek před přístupem k odpovídajícímu sdílenému prostředku. Některé systémy poskytují povinný zamykací mechanismus , při jehož použití bude pokus o neoprávněný přístup k uzamčenému zdroji přerušen vyvoláním výjimky na vlákno, které se pokusilo získat přístup.

Semafor  je nejjednodušší typ zámku. Z hlediska přístupu k datům se nerozlišuje mezi režimy přístupu: sdílený (pouze pro čtení) nebo výhradní (čtení-zápis). Ve sdíleném režimu může více vláken požadovat zámek pro přístup k datům v režimu pouze pro čtení. Režim výhradního přístupu se také používá v algoritmech aktualizace a mazání.

Typy zámků se vyznačují strategií blokování pokračování provádění vlákna. Ve většině implementací požadavek na zámek brání vláknu v pokračování ve vykonávání, dokud nebude uzamčený prostředek k dispozici.

Spinlock  je zámek, který ve smyčce čeká na udělení přístupu. Takový zámek je velmi účinný, pokud vlákno čeká na uzamčení malou dobu, čímž se vyhnete nadměrnému přeplánování vláken. Náklady na čekání na přístup budou značné, pokud jedno z vláken drží zámek po dlouhou dobu.

Pro efektivní implementaci uzamykacího mechanismu je nutná podpora na úrovni hardwaru. Hardwarová podpora může být implementována jako jedna nebo více atomických operací , jako je „ test-and-set “, „ fetch-and-add “ nebo „ porovnat a vyměnit “. Takové pokyny umožňují bez přerušení zkontrolovat, zda je zámek volný, a pokud ano, získat zámek.

Na jednoprocesorových systémech je možné provádět instrukce bez hardwarových přerušení pomocí speciálních instrukcí nebo instrukčních prefixů, které dočasně zablokují přerušení, ale tento přístup nefunguje na víceprocesorových systémech se sdílenou pamětí. Plná podpora zámků ve víceprocesorovém prostředí může vyžadovat poměrně složitou hardwarovou a softwarovou podporu se značnými problémy s načasováním .

Zámky na úrovni databáze

Poznámky