Jestem w następującej sytuacji.Jak korzystać z ReadWriteLock?
Podczas uruchamiania aplikacji internetowej muszę załadować mapę, która jest następnie używana przez wiele wątków przychodzących. Oznacza to, że żądania przychodzą, a mapa służy do sprawdzenia, czy zawiera konkretny klucz, a jeśli tak, to wartość (obiekt) jest pobierana i powiązana z innym obiektem.
Teraz czasami zmienia się zawartość mapy. Nie chcę ponownie uruchamiać aplikacji, aby ponownie załadować nową sytuację. Zamiast tego chcę to zrobić dynamicznie.
Jednak w momencie ponownego ładowania mapy (usuwania wszystkich elementów i zastępowania ich nowymi), wciąż będą pojawiać się żądania jednoczesnego odczytu na tej mapie.
Co należy zrobić, aby uniemożliwić wszystkim odczytanym wątkom dostęp do tej mapy podczas jej ponownego ładowania? Jak mogę to zrobić w najbardziej wydajny sposób, ponieważ potrzebuję tego tylko przy przeładowywaniu mapy, która ma miejsce tylko sporadycznie (co każde x tygodni)?
Jeśli powyższe opcje nie są opcją (blokowanie), w jaki sposób mogę się upewnić, że podczas ponownego ładowania moje żądanie odczytu nie ucierpi z powodu nieoczekiwanych wyjątków (ponieważ klucz już tam nie jest lub wartość nie jest już obecna lub jest ponownie załadowany)?
Dostałem radę, że ReadWriteLock może mi pomóc. Czy możesz mi podać przykład, w jaki sposób powinienem używać tego ReadWriteLock z moimi czytelnikami i moim pisarzem?
Dzięki,
E
Byłoby OK pod warunkiem, że nie trzeba coś sprawdzić na mapie przed aktualizacją to, co jest operacją sprawdzania, a następnie modyfikacji, a zatem nie atomową. – Adam