solicitudes de Java ReentrantReadWriteLock
-
11-09-2019 - |
Pregunta
Sólo una pregunta rápida sobre ReadWriteLocks en Java (en concreto la aplicación ReentrantReadWriteLock), ya que no encuentro la documentación claro sol.
¿Qué pasa si un bloqueo de lectura se lleva a cabo de un hilo cuando un bloqueo de escritura solicitada por otro? ¿El hilo de bloqueo de escritura tiene que esperar a que todos los bloqueos de lectura-actualmente en poder ser liberado? Además, no todas las peticiones de nueva lectura de bloqueo se bloquean hasta que se conceda y se libera el bloqueo de escritura?
Gracias
Solución
El Javadoc explica esto:
Esta clase no impone un lector o escritor preferencia para ordenar acceso a la cerradura. Sin embargo, lo hace de soporte opcional equidad política. Cuando se construye como justo, hilos sostienen para la entrada utilizando una aproximadamente Política de llegada de pedidos. Cuando se libera el bloqueo de escritura ya sea la que más tiempo esperando sola escritor se le asignará la escritura Bloquear o si hay un lector de espera más tiempo que cualquier escritor, el conjunto de los lectores se les asignará la lectura bloquear. Cuando se construye como no justo, el orden de entrada a la necesidad de bloqueo no estar en orden de llegada. En cualquiera caso, si los lectores están activos y una escritor entra en el cierre, entonces no Se otorgarán los lectores posteriores el bloqueo de lectura hasta después de que el escritor ha adquirido y puesto en libertad la escritura bloquee.
¿Qué pasa si un bloqueo de lectura se lleva a cabo de un hilo cuando un bloqueo de escritura solicitada por otro? ¿El hilo de bloqueo de escritura tiene que esperar a que todos los bloqueos de lectura-actualmente en poder ser liberado?
Sí, el escritor tendrá que esperar. Pero sólo se esperará a que los bloqueos de lectura actualmente en poder. Cualquier lector que lleguen después pondrán en cola después de que el escritor.
Además, hacen todas las solicitudes de nueva lectura de bloqueo se bloquean hasta que se conceda y se libera el bloqueo de escritura?
Sí
Otros consejos
A ReadWriteLock
no puede tener un bloqueo de escritura realizada al mismo tiempo como bloqueos de lectura. Las solicitudes para, por ejemplo, un bloqueo de escritura cuando un bloqueo de lectura se lleva a cabo resultará en el bloqueo o un fracaso.