demandes Java ReentrantReadWriteLock
-
11-09-2019 - |
Question
Juste une petite question à propos ReadWriteLocks en Java (en particulier la mise en œuvre de ReentrantReadWriteLock) que je ne trouve pas la documentation du soleil clair.
Qu'est-ce qui se passe si un verrou de lecture est maintenu par un fil quand un verrou d'écriture est demandée par un autre? Est-ce que le fil de verrouillage d'écriture doivent attendre que tous les verrous de lecture actuellement détenus à être libérés? En outre, faire toutes les nouvelles demandes de verrouillage lecture bloqués jusqu'à ce que le verrouillage en écriture est accordée et libéré?
Merci
La solution
Le Javadoc explique ceci:
Cette classe n'impose pas un lecteur ou écrivain préférence pour la commande de verrouiller l'accès. Cependant, il prend en charge une équité en option politique. Lorsque construit comme juste, threads soutiennent d'entrée en utilisant un environ la politique arrivée ordre. Lorsque le verrou d'écriture est libéré soit la plus longue attente unique écrivain sera affecté l'écriture verrouiller, ou s'il y a un lecteur en attente plus que tout écrivain, l'ensemble des les lecteurs seront affectés à la lecture fermer à clé. Lorsque construit comme non équitable, l'ordre d'entrée à la nécessité de verrouillage pas en ordre d'arrivée. Dans les deux cas cas, si les lecteurs sont actifs et écrivain entre dans la serrure alors pas lecteurs ultérieurs seront accordés le verrou de lecture jusqu'à ce que l'écrivain a acquis et libéré l'écriture verrouiller.
Qu'est-ce qui se passe si un verrou de lecture est maintenu par un fil quand un verrou d'écriture est demandée par un autre? Est-ce que le fil de verrouillage d'écriture doivent attendre que tous les verrous de lecture actuellement détenus à être libérés?
Oui, l'auteur devra attendre. Mais il n'attendre que les verrous en lecture actuellement détenus. Tous les lecteurs qui arrivent plus tard après la file d'attente sera l'auteur.
En outre, faire toutes les nouvelles demandes de verrouillage lecture bloqués jusqu'à ce que le verrouillage en écriture est accordée et libéré?
Oui
Autres conseils
Un ReadWriteLock
ne peut pas avoir un verrou d'écriture a eu lieu en même temps que les verrous de lecture. Les demandes de, disons, un verrou d'écriture quand un verrou de lecture est maintenue entraînera le blocage ou un échec.