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

¿Fue útil?

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?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top