tryLock-wersja z parametrem czasowym, sens jej dzialania.

0

zalozmy ze mam taki kod

if (myLock.tryLock(100, TimeUnit.MILLISECONDS))
// Sekcja krytyczna A
try { . . . }
finally { myLock.unlock(); }
else
// Wątek przechodzi do innych działań.

Zalozmy ze blokada jest w posiadaniu watku 1 i teraz watek 2 wchodzi do if. I co sie dzieje? Rozumiem ze watek 2 wykona teraz to co jest w elsie, ale co mi daje ten parametr z czasem?Przeciez jesli watek 2 bedzie w if to sprawddzi ze nie moze wykonac blokady i przejdzie dalej tak?A co jesli w.w kod mialby taka postac:

myLock.tryLock(100, TimeUnit.MILLISECONDS)
// Sekcja krytyczna A
try { . . . }
finally { myLock.unlock(); }

Tak ogolnie to nie wiem co sie dzieje, kiedys jest wywolywana przeciazana wersja tryLock z parametrem czasowym?

1

W pierwszym przypadku, jeżeli w sekcji krytycznej jest już jeden wątek to upłynie 100ms i tryLock zwróci false i wykona się else. Jeżeli przez te 100ms "zwolniło się miejsce" i można wykonać blokadę to tryLock zwróci true i wykona się sekcja krytyczna (z założeniem locka).

Drugi przykład jest bez sensu bo każdy wątek wejdzie w sekcje krytyczną tylko jeżeli będzie założony lock to z opóźnieniem 100ms :P

0

Acha, dzieki bardzo widzisz nie rozumialem o co chodzi z tym parametrem czasowym. Czyli moje else sie wykona dopiero po uplywie tego czasu, ok teraz wszystko stalo sie przejrzyste. Dzieki bardzo:)W takim przypadku rzeczywiscie drugi przyklad jest pozbawiony sensu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1