Wątki – synchronizacja wątków czyli Semaphore

Wątki – synchronizacja wątków czyli Semaphore

Cześć!

     Czas wrócić do serii o wątkach. W ostatniej części, czyli trzeciej omówiłem pojęcie wielowątkowości w teorii oraz na przykładzie kodu. Dodatkowo, pokazałem jeden z mechanizmów synchronizacji wątków (synchronized). Poza klasyczną synchronizacją wątków, możemy wykorzystać takie mechanizmy jak:

  • sempahory
  • locki,
  • latche
  • barriery

Dzisiaj chciałbym omówić Semaphore.

Wstęp

     Można śmiało stwierdzić, że wszystkie wyżej wymienione pojęcia to narzędzia które pomagają programistom w odpowiedni sposób synchronizować kod między wątkami. Osobiście mając już kilka lat doświadczenia w branży, zauważam, że z roku na rok jestem coraz bardziej świadomy jak temat wątków jest ważny i jak bardzo lekceważony jest przez początkujących programistów.

Synchronized

     Jeden z najpopularniejszych mechanizmów służących do synchronizacji kodu. Omawiałem je w poprzednim wpisie, więc kliknij tutaj aby przeczytać.

Semaphore

     Mechanizm ten używany jest do kontrolowania dostępu do współdzielonego zasobu. Java oczywiście dostarcza klasę Semaphore, która zawiera konstruktory i różne metody do kontroli dostępu do współdzielonego zasobu. No dobra, ale co to oznacza w praktyce? W praktyce oznacza to, że możemy określić maksymalną ilośc wątków które mogą korzystaćz danego zasobu w danej chwili. W przypadku kiedy limit nie zostaje osiągnięty, kolejny wątek może uzyskać dostęp – jeśli limit został osiągnięty, to czeka w kolejce. 

Można sobie wyobrazić wizytę w jakimkolwiek sklepie, np. w piekarni gdzie dostępne są jedynie dwie kasy. Dopóki kasy są wolne można kupić pieczywo, w przeciwnym razie stoimy w kolejce dopóki sprzedawcy nie obsłużą klientów przy kasie. Tak prezentowałby się kod:

Przykład użycia klasy Semaphore. biegajacyprogramista.pl

Semaphorów zazwyczaj używa się, jeśli musimy zarządzać zasobami, które wymagają dużej ilości zasobów. Dzięki temu świetnemu mechanizmowi możemy w łatwy sposób wszystkim zarządzać i ustalać limity jakie tylko chcemy. 

Podsumowanie

     Pojęcie wątków nie kończy się jedynie na pojęciu Thread. Jest to bardzo obszerny temat, dlatego rozbijam go na jak najmniejsze części. Dzisiaj wspólnie przebrnęliśmy przez mechanizm „Sempahore”. Już w następnym wpisie programistycznym zostanie przedłużona część o wątkach i zostanie omówimy „Lock”.

Pozdrawiam serdecznie,
biegajacyprogramista.pl

Dodaj komentarz

eleven − five =

Close Menu