2013-03-31 17 views
5

Jak mogę osiągnąć ekskluzywne pisanie, ale nie-wyłączne czytanie? Czy mogę uzyskać dostęp do settera i utworzyć zmienną volatile? Czy to wystarczy?Jak osiągnąć ekskluzywne pisanie, ale czytanie bez wyłączności?

+1

Jaką zmienną to jest? Niektóre typy mają gwarantowane zapisy atomowe. –

+1

Czy możesz pokazać przykład kodu, który tego wymaga? W niektórych sytuacjach można po prostu oznaczyć zmienną zmienną. – assylias

Odpowiedz

6

Spójrz na java5 jednoczesnego api:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/ReadWriteLock.html

ten osiągnie swoje wymagania, ponieważ można pozwolić kilka czytania wątku bez blokowania zamka i tylko podczas pisania.

Oto ciekawy post porównywaniu tego API z tradycyjnym synchronizowane podczas czytania: ReentrantReadWriteLock vs synchronized

Poza tym, jak powiedział w komentarzu @assylias, należy unikać blokowania, gdy nie jest to naprawdę konieczne.

Rzeczywiście, można zaufać słowa kluczowego volatile tylko i wyłącznie, jeśli spełnione są oba warunki:

Można używać zmiennych lotnych zamiast zamków tylko pod ograniczony zestaw okoliczności. Oba poniższe kryteria muszą być spełnione dla zmiennych lotnych, aby zapewnić pożądane bezpieczeństwo gwintów:

_ Zapisane do zmiennej nie zależą od jej bieżącej wartości.

_ Zmienna nie uczestniczy w niezmiennikach z innymi zmiennymi.

+1

W zależności od użycia może nie być konieczne stosowanie blokowania i może być wystarczająca zmienność. – assylias

Powiązane problemy