Blokada (informatyka)

Blokada (ang. lock) – mechanizm służący do zapobiegania konfliktom w dostępie do zasobów w środowiskach wielozadaniowych.

Zadanie (proces lub wątek) przed uzyskaniem dostępu do zasobu musi uzyskać dla siebie blokadę tego zasobu. Po zakończeniu wykorzystywania zasobu, zadanie musi blokadę zwolnić, aby udostępnić zasób innym zadaniom.

Podział blokad odzwierciedla podział zasobów na prywatne, wyłączne i dzielone:

  • W przypadku zasobów prywatnych nie jest konieczny mechanizm blokad, gdyż zasób jest trwale powiązany z zadaniem.
  • Uzyskanie blokady wyłącznej uniemożliwia innym zadaniom dostęp do niej na czas jej posiadania.
  • Blokady dzielone mogą być w jednej chwili uzyskane przez więcej niż jedno zadanie. Ilość zadań, które mogą uzyskać dostęp do blokady dzielonej, zależy od kodu programu i zwykle jest zależna od struktury danych lub urządzenia, z którym ta blokada jest związana.

Zależnie od systemu blokady mogą być albo ściśle egzekwowane (mandatory locks), albo służą jedynie do informowania procesu o tym, że dostęp jest bezpieczny, i nie są wymuszane (advisory locks). Te pierwsze są powszechne w systemach baz danych, te drugie w systemach plików.

Kluczowym mankamentem algorytmów większości blokad jest konieczność uzyskiwania i zwalniania ich przez program realizujący zadanie, więc zależy jedynie od programisty i jego kodu. Przy błędnym kodzie pojawiają się problemy takie jak zakleszczenie.

Zobacz też[edytuj | edytuj kod]