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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top