richieste Java ReentrantReadWriteLock
-
11-09-2019 - |
Domanda
Solo una breve domanda su ReadWriteLocks in Java (in particolare l'attuazione ReentrantReadWriteLock) come io non trovare la documentazione sole chiaro.
Che cosa accade se un blocco di lettura è detenuto da un thread quando un blocco di scrittura è richiesto da un altro? Ha il filo blocco di scrittura devono aspettare per tutti-serrature leggere attualmente detenute per essere rilasciato? Inoltre, tutte le richieste di nuova lettura di bloccaggio si bloccano fino a quando la scrittura di blocco è concesso e rilasciato?
Grazie
Soluzione
Il Javadoc spiega in questo modo:
Questa classe non impone un lettore o scrittore preferenza ordinare per accesso serratura. Tuttavia, lo fa il supporto un optional correttezza politica. Quando costruito come giusto, thread contendono per l'ingresso utilizzando un circa la politica arrivo-ordine. Quando il blocco di scrittura viene rilasciato sia la più lunga attesa singolo scrittore verrà assegnato il write bloccare, o se c'è un lettore di attesa più di qualsiasi scrittore, l'insieme di lettori saranno assegnati lettura serratura. Quando costruite come non-fiera, l'ordine di entrata alla necessità di blocco non essere in ordine di arrivo. In entrambi caso, se i lettori sono attivi e un scrittore entra nel dispositivo allora no saranno concessi i lettori successivi il blocco di lettura fino a dopo che lo scrittore ha acquisito e rilasciato la scrittura bloccare.
Che cosa accade se un blocco di lettura è detenuto da un thread quando un blocco di scrittura è richiesto da un altro? Ha il filo blocco di scrittura devono aspettare per tutti-serrature leggere attualmente detenute per essere rilasciato?
Sì, lo scrittore dovrà aspettare. Ma sarà solo aspettare che le serrature di lettura attualmente detenute. Eventuali lettori che arrivano tardi a mettersi in fila dopo lo scrittore.
Inoltre, non tutte le richieste di nuova lettura di bloccaggio si bloccano fino a quando la scrittura di blocco è concesso e rilasciato?
Si
Altri suggerimenti
Un ReadWriteLock
non può avere un blocco di scrittura tenuto allo stesso tempo, come blocchi di lettura. Le richieste di, diciamo, un blocco di scrittura quando un blocco di lettura si svolge si tradurrà in blocco o un fallire.