tryLock-wersja z parametrem czasowym, sens jej dzialania.

tryLock-wersja z parametrem czasowym, sens jej dzialania.
KD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 194
0

zalozmy ze mam taki kod

Kopiuj
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:

Kopiuj
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?

AL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
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

KD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 194
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.