Pergunta

Apenas uma pergunta rápida sobre ReadWriteLocks em Java (especificamente a implementação ReentrantReadWriteLock) como eu não encontrar a documentação sol claro.

O que acontece se um bloqueio de leitura é realizada por um fio quando um bloqueio de gravação é solicitada por outro? Será que o fio de bloqueio de gravação tem que esperar por todos os ler-locks atualmente detidas para ser lançado? Além disso, fazer todos os novos pedidos de leitura de bloqueio ficar bloqueado até que o write-bloqueio é concedido e lançado?

Graças

Foi útil?

Solução

O Javadoc explica isso:

Esta classe não impõe um leitor ou escritor preferência de ordenação para acesso de bloqueio. No entanto, ele faz suporte um opcional equidade política. Quando construído como justo, tópicos contend para entrada utilizando um aproximadamente política de chegada ordem. Quando o bloqueio de gravação é liberada quer o único mais longa espera escritor será atribuído o write bloquear, ou se há uma espera leitor mais do que qualquer escritor, o conjunto de leitores será atribuído a leitura bloquear. Quando construído como não-feira, a ordem de entrada para a necessidade de bloqueio não estar em ordem de chegada. Em ambos caso, se os leitores estão ativos e um escritor entra na fechadura, em seguida, nenhuma será concedido leitores subseqüentes o bloqueio de leitura até depois que o escritor adquiriu e lançou o write fechadura.


O que acontece se um bloqueio de leitura é realizada por um fio quando um bloqueio de gravação é solicitada por outro? Será que o fio de bloqueio de gravação tem que esperar por todos os ler-locks atualmente detidas para ser lançado?

Sim, o escritor vai ter que esperar. Mas ela só vai esperar para os bloqueios de leitura atualmente detidas. Qualquer leitor que chegam depois vai a fila depois de o escritor.

Além disso, não todos os novos pedidos de leitura de bloqueio ficar bloqueado até que o write-bloqueio é concedido e lançado?

Sim

Outras dicas

A ReadWriteLock não pode ter um bloqueio de gravação realizada ao mesmo tempo, como bloqueios de leitura. Os pedidos de, digamos, um bloqueio de gravação quando um bloqueio de leitura é realizada resultará no bloqueio ou uma falha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top