Chcę móc blokować na podstawie hierarchii systemu plików. NpHierarchiczne blokady muteksu w Javie
gwintu 1:
lock("/");
doStuff();
unlock();
gwintu 2:
lock("/sub/foo");
doStuff();
unlock();
gwintu 3:
lock("/sub/bar");
doStuff();
unlock();
przypadku gwintu 1 uzyskuje blokady pierwszy wtedy nici 2 i 3 jest być zablokowane, dopóki wątek 1 nie zostanie odblokowany. Jeśli jednak wątek 2 uzyska najpierw blokadę, wówczas wątek 3 powinien być w stanie wykonać w tym samym czasie co wątek 2. Ogólna zasada jest taka, że jeśli istnieje blokada katalogu nadrzędnego, wówczas wątek musi blokować.
Czy Java ma wbudowane coś, co może pomóc rozwiązać ten problem? Chcę uniknąć przechowywania blokady na katalog, ponieważ będą setki tysięcy katalogów.
+1 za bardzo interesujące pytanie. Czy struktura katalogów jest określona z góry, czy też "pliki" mogą być tworzone ad-hoc? Co to jest system priorytetów, jeśli jeden wątek chce uzyskać katalog główny, podczas gdy wiele innych wątków próbuje uzyskać pojedyncze pliki?Czy wątek, który chce, aby root był głodny, czy jest jakaś gwarancja, którą masz na myśli? – templatetypedef
Zakładam, że jeśli wątek 2 nabywa blokadę, wątek 1 powinien blokować, prawda? – Irfy
Częścią motywacji jest zmodyfikowanie systemu plików, aby ścieżki stale się zmieniały. Nie jestem pewien, jak poradzić sobie z głodem gwintu ... to jest coś, czego tak naprawdę nie brałem pod uwagę. Przypuszczam, że mechanizm blokady odczytu/zapisu może być bliski rozwiązania tego problemu i być w stanie obsłużyć nie głodujące wątki. –