El siguiente es el típico patrón de lector y escritor (una gran cantidad de lecturas y escrituras pocos)Java: ReentrantReadWriteLock con prioridad
private ReadWriteLock lock = new ReentrantReadWriteLock();
private int value;
public void writeValue(int newValue){
lock.writeLock().lock();
try{
this.value = newValue;
}
finally{
lock.writeLock().unlock();
}
}
public int readValue(){
lock.readLock().lock();
try{
return value;
}
finally{
lock.writeLock().unlock();
}
}
Me pregunto que es posible tener prioridad al escritor y el lector? Por ejemplo, normalmente el escritor podría esperar mucho tiempo (quizás para siempre) si hay bloqueos de lectura retenidos constantemente por otro hilo, por lo que es posible tener un escritor con mayor prioridad, de modo que cada vez que un escritor llegue pueda considerarse como que está siendo alta prioridad (salto de línea) algo así.
¿Cree que es necesaria otra recolección concurrente adicional en este punto? como BlockingQueue? o Concurrent PriortyQueue algo así? – peter
@ user1389813 - ¿la orden fifo no es una garantía lo suficientemente fuerte para sus necesidades? teniendo en cuenta que los lectores (en su ejemplo) solo leen un valor simple, no puedo imaginar que un escritor estará bloqueado durante tanto tiempo esperando a los lectores existentes (que pueden proceder al mismo tiempo). – jtahlborn
¿cuál es su sugerencia? – peter