Załóżmy, że nie korzystamy z synchronizacji, lecz z monitorów ( z zmiennych Condition i Lock).
Załóżmy też, że mamy współdzielony zasób do którego chcemy kontrolować dostęp.
Mamy trzy typy wątków:
Typ1 to taki wątek, że wiele wątków tego typu może korzystać z zasobu, ale nie może w tym czasie korzystać wątek typu drugiego oraz trzeciego.
Typ2 to taki wątek, że w danym czasie może korzystać on i tylko on.
Typ3 tak samo jak drugi z jedną różnicą. Może on wywłaszczyć zasób jeżeli zechce skorzystać.
Pytania:
- Jak zorganizować to, żeby wątki typu pierwszego mogły korzystać naraz zasobu?
- Jak wywłaszczać zasób w wątku trzecim?
- Na początku każdej metody "sterującej" wątkiem rozważam blokowanie Locka ( locker.lock() ). Tak się zastanawiam, co się stanie, jeżeli na początku zrobimy locker.lock(), a locker będzie już zablokowany?
P.S Wątki są już w systemie. Mamy jedynie napisać metody sterujące. Np. Jeżeli mamy wątek typu pierwszego to on wygląda mniej więcej tak:
jakaś pętla:
uzyskaj_dostęp();
coś tam zrób();
oddaj_zasób();
I napiszmy uzyskaj_dostep() oraz oddaj_zasób();