A számítástechnikában a zár egy szinkronizálási mechanizmus , amely több szál között lehetővé teszi a megosztott erőforrásokhoz való kizárólagos hozzáférést . A zárak az egyidejűség- ellenőrzési politika érvényesítésének egyik módja .
Alapvetően lágy zárolást használnak , amely feltételezi, hogy minden szál megpróbál zárat szerezni, mielőtt hozzáférne a megfelelő megosztott erőforráshoz. Egyes rendszerek biztosítanak egy kötelező zárolási mechanizmust, amely használatakor a zárolt erőforráshoz való jogosulatlan hozzáférési kísérlet megszakad azáltal, hogy kivételt dob a hozzáférést megkísérlő szálra.
A szemafor a zár legegyszerűbb típusa. Az adathozzáférés tekintetében nem teszünk különbséget a hozzáférési módok között: megosztott (csak olvasási) vagy exkluzív (írás-olvasás). Megosztott módban több szál kérhet zárolást, hogy csak olvasható módban hozzáférjen az adatokhoz. A kizárólagos hozzáférési módot a frissítési és törlési algoritmusok is használják.
A zárak típusait az a stratégia különbözteti meg, amely blokkolja a szál végrehajtásának folytatását. A legtöbb megvalósításban a zárolási kérés megakadályozza, hogy a szál továbbra is fusson, amíg a zárolt erőforrás elérhetővé nem válik.
A spinlock egy olyan zár, amely egy hurokban vár, amíg a hozzáférést megadják. Az ilyen zárolás nagyon hatékony, ha egy szál kis ideig vár a zárra, így elkerülhető a szálak túlzott átütemezése. A hozzáférésre való várakozás költsége jelentős lesz, ha az egyik szál hosszú ideig tartja a zárat.
A zárszerkezet hatékony megvalósításához hardverszintű támogatás szükséges. A hardver támogatása megvalósítható egy vagy több atomi műveletként , mint például a " teszt és beállítás ", " fetch-and-add " vagy " összehasonlítás és csere ". Az ilyen utasítások lehetővé teszik a zár megszakítás nélküli ellenőrzését, és ha igen, akkor a zár megszerzését.
Egyprocesszoros rendszereken lehetőség van az utasítások hardveres megszakítások nélküli végrehajtására speciális utasítások vagy utasítás-előtagok használatával, amelyek ideiglenesen letiltják a megszakításokat, de ez a megközelítés nem működik osztott memóriás többprocesszoros rendszereken. A zárolások teljes támogatása többprocesszoros környezetben meglehetősen összetett hardver- és szoftvertámogatást igényelhet, jelentős időzítési problémákkal .